From 7cb2079af455a6279400b08d1ddfe4ba261a08b7 Mon Sep 17 00:00:00 2001 From: "zik.saleeba" Date: Wed, 15 Apr 2009 06:57:02 +0000 Subject: [PATCH] Macros implemented git-svn-id: http://picoc.googlecode.com/svn/trunk@245 21eae674-98b7-11dd-bd71-f92a316d2d60 --- expression.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/expression.c b/expression.c index 62ac326..4d7d158 100644 --- a/expression.c +++ b/expression.c @@ -1214,13 +1214,14 @@ int ExpressionParse(struct ParseState *Parser, struct Value **Result) VariableGet(Parser, LexValue->Val->Identifier, &VariableValue); if (VariableValue->Typ->Base == TypeMacro) { - ProgramFail(Parser, "XXX macros unimplemented"); -#if 0 + /* evaluate a macro as a kind of simple subroutine */ struct ParseState MacroParser = VariableValue->Val->Parser; + struct Value *MacroResult; - if (!ExpressionParse(&MacroParser, Result) || LexGetToken(&MacroParser, NULL, FALSE) != TokenEndOfFunction) + if (!ExpressionParse(&MacroParser, &MacroResult) || LexGetToken(&MacroParser, NULL, FALSE) != TokenEndOfFunction) ProgramFail(&MacroParser, "expression expected"); -#endif + + ExpressionStackPushValueNode(Parser, &StackTop, MacroResult); } else if (VariableValue->Typ == TypeVoid) ProgramFail(Parser, "a void value isn't much use here");