Hi guys,
Is there a portable (that would work in GemStone too) and safe way to know if a String would be a block? I must support this kind of strings: 'singleString' -> false 'multi string' -> false ' [:a | 42]' -> true ' '' '' [:a | 42]' -> true '[:a | 42]' -> true ' "a commet" [:a | 42]' -> true ' WhateverClass someVeryBadHackishMethod. [:a | 42]' -> true I need to identify whether the string is a closure or not. And ideally, I don't want to do an #evaluate: because I don't want any left hand code to be executed. I tried with #parse: why I am having problems. |
Presumably, you must parse the string (not evaluate), obtain an Abstract Syntax Tree on return (or an Exception), and check that this AST conforms to some pattern (at worse you code naïvly the pattern matching, at best you can reuse the refactor/rewrite engine). I've not followed latest Compiler developments, but from what I understand, more and more tools are based on AST...so it sounds pretty straight-forward. 2017-07-24 18:21 GMT+02:00 Mariano Martinez Peck <[hidden email]>:
|
In reply to this post by Mariano Martinez Peck
Hi Mariano, _,,,^..^,,,_ (phone)
Once you've extracted the parser invocation you can wrap this in a suitable exception handler. Then you have your block parser. You still have to validate the parse tree and/or generated code before evaluating since someone could write malicious code within the block right? |
RBParser parseMethod: '...' parses a method RBParser parseExpression: '...' does it for an expression But I think both of them return a method node? I cannot recall. However, you can always do at the end node methodNode statements last isBlockNode or something like that. Can't you? On Sun, Aug 13, 2017 at 4:32 AM, Eliot Miranda <[hidden email]> wrote:
|
Free forum by Nabble | Edit this page |