Issue 377: broken calling of function in expressions
authorAndy Valencia <ajv-899-334-8894@vsta.org>
Mon, 18 Jul 2016 01:03:14 +0000 (18:03 -0700)
committerAndy Valencia <ajv-899-334-8894@vsta.org>
Mon, 18 Jul 2016 01:03:14 +0000 (18:03 -0700)
Applications/SmallC/.gitignore [new file with mode: 0644]
Applications/SmallC/primary.c

diff --git a/Applications/SmallC/.gitignore b/Applications/SmallC/.gitignore
new file mode 100644 (file)
index 0000000..5d899c1
--- /dev/null
@@ -0,0 +1,6 @@
+copt
+lscc6801
+lscc6809
+lscc8080
+lsccgeneric
+lsccz80
index 3c802dd..1b443fe 100644 (file)
@@ -87,10 +87,13 @@ int primary(LVALUE *lval) {
             }
             return FETCH | reg;
         }
-        /* Globals and anything we can directly access */
+
+       /* Globals, function names */
+       lval->symbol = symbol;
+       lval->indirect = 0;
         if (symbol->identity != FUNCTION) {
-            lval->symbol = symbol;
-            lval->indirect = 0;
+
+           /* Globals and anything we can directly access */
             if (symbol->type == STRUCT) {
                 lval->tagsym = &tag_table[symbol->tagidx];
             }
@@ -102,17 +105,21 @@ int primary(LVALUE *lval) {
                 return FETCH | HL_REG;
             }
 
-            if (symbol->storage == LSTATIC)
+            if (symbol->storage == LSTATIC) {
                 gen_get_locale(symbol);
-            else {
+            else {
                 gen_immediate();
                 output_string(symbol->name);
                 newline();
             }
             lval->indirect = symbol->type;
             lval->ptr_type = symbol->type;
-            return 0;
-        }
+        } else {
+
+           /* Function call */
+            lval->ptr_type = symbol->type;
+       }
+       return 0;
     }
     lval->symbol = 0;
     lval->indirect = 0;