On 14/04/15 14:49, Daniel Holden wrote:
> Hi,
> 
> Thanks Ramsay and Sergey, sorry for misunderstanding about the mob branch! 
> Working with git makes everything a lot easier - I was building the patch by 
> hand.
> 
> I've attached a new patch for the mob branch which should work.

The format of the attachment is not suitable for application by
'git am' (or 'git apply' for that matter), without some manual
massaging of the file. However, I managed to whip it into enough
shape to apply and test.

You still have whitespace errors:

  $ git show --check
  commit c6a83478766fcde878219c2587978100c43b2a05
  Author: Daniel Holden <[email protected]>
  Date:   Tue Apr 14 18:21:33 2015 +0100

      Fixed Dollars in Identifiers Patch
      
      Added tests for dollars in identifiers flag and also fixed issue with
      compile flags not being ready at the time of preprocessor
      construction. Added fix for syntax conflict with asm where identifier
      with $ as first character has different meaning.

  tests/tests2/76_dollars_in_identifiers.c:20: trailing whitespace.
  +   
  tests/tests2/76_dollars_in_identifiers.c:23: trailing whitespace.
  +   
  tests/tests2/76_dollars_in_identifiers.c:24: trailing whitespace.
  +   int $ = 10; 
  tests/tests2/76_dollars_in_identifiers.c:30: trailing whitespace.
  +   
  tests/tests2/76_dollars_in_identifiers.c:42: new blank line at EOF.
  $ 

(Note that I didn't manage to keep your commit date!)

However, the patch builds and passes all tests.

After the following:

  $ vim tests/tests2/76_dollars_in_identifiers.c  # fixup whitespace
  $ git diff
  diff --git a/tests/tests2/76_dollars_in_identifiers.c 
b/tests/tests2/76_dollars_in_identifiers.c
  index 48c48fd..c5fcf99 100644
  --- a/tests/tests2/76_dollars_in_identifiers.c
  +++ b/tests/tests2/76_dollars_in_identifiers.c
  @@ -17,17 +17,17 @@ int main()
      printf("fred2=%d\n", $($fred));
      printf("joe2=%d\n", $(joe$));
      printf("henry2=%d\n", $(hen$y));
  -   
  +
      printf("fred10=%d\n", $10($fred));
      printf("joe_10=%d\n", _$10(joe$));
  -   
  -   int $ = 10; 
  +
  +   int $ = 10;
      int a100$ = 100;
      int a$$ = 1000;
      int a$c$b = 2121;
      int $100 = 10000;
      const char *$$$ = "money";
  -   
  +
      printf("local=%d\n", $);
      printf("a100$=%d\n", a100$);
      printf("a$$=%d\n", a$$);
  @@ -39,4 +39,3 @@ int main()
   }
 
   /* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
  -
  $ git diff --check
  $

  $ git add tests/tests2/76_dollars_in_identifiers.c 
  $ git commit --amend
  [daniel e3f4b4e] Fixed Dollars in Identifiers Patch
   Author: Daniel Holden <[email protected]>
   Date: Tue Apr 14 18:21:33 2015 +0100
   6 files changed, 77 insertions(+), 13 deletions(-)
   create mode 100644 tests/tests2/76_dollars_in_identifiers.c
   create mode 100644 tests/tests2/76_dollars_in_identifiers.expect
  $ git show --check
  commit e3f4b4e3c115274b61efafa6bab7171c7d504352
  Author: Daniel Holden <[email protected]>
  Date:   Tue Apr 14 18:21:33 2015 +0100

      Fixed Dollars in Identifiers Patch
    
      Added tests for dollars in identifiers flag and also fixed issue with
      compile flags not being ready at the time of preprocessor
      construction. Added fix for syntax conflict with asm where identifier
      with $ as first character has different meaning.

  $ 

  $ git format-patch -1
  0001-Fixed-Dollars-in-Identifiers-Patch.patch
  $ 

The resulting patch file should (which I've attached) _should_ apply
to the current mob branch (@ commit a13f183), thus:

  $ git checkout -b daniel mob
  Switched to a new branch 'daniel'
  $ git am 0001-Fixed-Dollars-in-Identifiers-Patch.patch
  Applying: Fixed Dollars in Identifiers Patch
  $

HTH

ATB,
Ramsay Jones



>From e3f4b4e3c115274b61efafa6bab7171c7d504352 Mon Sep 17 00:00:00 2001
From: Daniel Holden <[email protected]>
Date: Tue, 14 Apr 2015 18:21:33 +0100
Subject: [PATCH] Fixed Dollars in Identifiers Patch

Added tests for dollars in identifiers flag and also fixed issue with
compile flags not being ready at the time of preprocessor
construction. Added fix for syntax conflict with asm where identifier
with $ as first character has different meaning.
---
 tccasm.c                                      |  3 +-
 tccpp.c                                       | 18 +++++++-----
 tests/Makefile                                |  2 +-
 tests/tests2/76_dollars_in_identifiers.c      | 41 +++++++++++++++++++++++++++
 tests/tests2/76_dollars_in_identifiers.expect | 14 +++++++++
 tests/tests2/Makefile                         | 12 +++++---
 6 files changed, 77 insertions(+), 13 deletions(-)
 create mode 100644 tests/tests2/76_dollars_in_identifiers.c
 create mode 100644 tests/tests2/76_dollars_in_identifiers.expect

diff --git a/tccasm.c b/tccasm.c
index d9c929c..25277fe 100644
--- a/tccasm.c
+++ b/tccasm.c
@@ -747,7 +747,7 @@ static int tcc_assemble_internal(TCCState *s1, int do_preprocess)
 
     ch = file->buf_ptr[0];
     tok_flags = TOK_FLAG_BOL | TOK_FLAG_BOF;
-    parse_flags = PARSE_FLAG_ASM_COMMENTS;
+    parse_flags |= PARSE_FLAG_ASM_COMMENTS;
     if (do_preprocess)
         parse_flags |= PARSE_FLAG_PREPROCESS;
     next();
@@ -853,6 +853,7 @@ static void tcc_assemble_inline(TCCState *s1, char *str, int len)
     memcpy(file->buffer, str, len);
 
     macro_ptr = NULL;
+    parse_flags |= PARSE_FLAG_ASM_FILE;
     tcc_assemble_internal(s1, 0);
     tcc_close();
 
diff --git a/tccpp.c b/tccpp.c
index 111ea2b..d9300da 100644
--- a/tccpp.c
+++ b/tccpp.c
@@ -2287,9 +2287,11 @@ maybe_newline:
         }
         break;
     
-    /* treat $ as allowed char in indentifier  */
-    case '$': if (!tcc_state->dollars_in_identifiers) goto parse_simple;    
-    
+    /* dollar is allowed to start identifiers when not parsing asm */
+    case '$':
+        if (!tcc_state->dollars_in_identifiers
+        || (parse_flags & PARSE_FLAG_ASM_FILE)) goto parse_simple;
+
     case 'a': case 'b': case 'c': case 'd':
     case 'e': case 'f': case 'g': case 'h':
     case 'i': case 'j': case 'k': case 'l':
@@ -2312,7 +2314,8 @@ maybe_newline:
         p++;
         for(;;) {
             c = *p;
-            if (!isidnum_table[c-CH_EOF])
+            if (!isidnum_table[c-CH_EOF]
+            && (tcc_state->dollars_in_identifiers ? c != '$' : 1))
                 break;
             h = TOK_HASH_FUNC(h, c);
             p++;
@@ -2347,7 +2350,8 @@ maybe_newline:
             p--;
             PEEKC(c, p);
         parse_ident_slow:
-            while (isidnum_table[c-CH_EOF]) {
+            while (isidnum_table[c-CH_EOF]
+            || (tcc_state->dollars_in_identifiers ? c == '$' : 0)) {
                 cstr_ccat(&tokcstr, c);
                 PEEKC(c, p);
             }
@@ -3176,9 +3180,9 @@ ST_FUNC void preprocess_new(void)
     const char *p, *r;
 
     /* init isid table */
+
     for(i=CH_EOF;i<256;i++)
-        isidnum_table[i-CH_EOF] = (isid(i) || isnum(i) ||
-            (tcc_state->dollars_in_identifiers ? i == '$' : 0));
+        isidnum_table[i-CH_EOF] = isid(i) || isnum(i);
 
     /* add all tokens */
     if (table_ident) {
diff --git a/tests/Makefile b/tests/Makefile
index bc68de0..98ccb1e 100644
--- a/tests/Makefile
+++ b/tests/Makefile
@@ -199,7 +199,7 @@ ex%: $(top_srcdir)/examples/ex%.c
 
 # tiny assembler testing
 asmtest.ref: asmtest.S
-	$(CC) -Wa,-W -o asmtest.ref.o -c asmtest.S
+	$(CC) -m32 -Wa,-W -o asmtest.ref.o -c asmtest.S
 	objdump -D asmtest.ref.o > asmtest.ref
 
 asmtest: asmtest.ref
diff --git a/tests/tests2/76_dollars_in_identifiers.c b/tests/tests2/76_dollars_in_identifiers.c
new file mode 100644
index 0000000..c5fcf99
--- /dev/null
+++ b/tests/tests2/76_dollars_in_identifiers.c
@@ -0,0 +1,41 @@
+#include <stdio.h>
+
+#define $(x) x
+#define $fred 10
+#define joe$ 20
+#define hen$y 30
+
+#define $10(x) x*10
+#define _$10(x) x/10
+
+int main()
+{
+   printf("fred=%d\n", $fred);
+   printf("joe=%d\n", joe$);
+   printf("henry=%d\n", hen$y);
+
+   printf("fred2=%d\n", $($fred));
+   printf("joe2=%d\n", $(joe$));
+   printf("henry2=%d\n", $(hen$y));
+
+   printf("fred10=%d\n", $10($fred));
+   printf("joe_10=%d\n", _$10(joe$));
+
+   int $ = 10;
+   int a100$ = 100;
+   int a$$ = 1000;
+   int a$c$b = 2121;
+   int $100 = 10000;
+   const char *$$$ = "money";
+
+   printf("local=%d\n", $);
+   printf("a100$=%d\n", a100$);
+   printf("a$$=%d\n", a$$);
+   printf("a$c$b=%d\n", a$c$b);
+   printf("$100=%d\n", $100);
+   printf("$$$=%s", $$$);
+
+   return 0;
+}
+
+/* vim: set expandtab ts=4 sw=3 sts=3 tw=80 :*/
diff --git a/tests/tests2/76_dollars_in_identifiers.expect b/tests/tests2/76_dollars_in_identifiers.expect
new file mode 100644
index 0000000..4a20a52
--- /dev/null
+++ b/tests/tests2/76_dollars_in_identifiers.expect
@@ -0,0 +1,14 @@
+fred=10
+joe=20
+henry=30
+fred2=10
+joe2=20
+henry2=30
+fred10=100
+joe_10=2
+local=10
+a100$=100
+a$$=1000
+a$c$b=2121
+$100=10000
+$$$=money
diff --git a/tests/tests2/Makefile b/tests/tests2/Makefile
index 35ab3c1..a5a18fb 100644
--- a/tests/tests2/Makefile
+++ b/tests/tests2/Makefile
@@ -94,8 +94,8 @@ TESTS =	\
  72_long_long_constant.test \
  73_arm64.test \
  74_nocode_wanted.test \
- 75_array_in_struct_init.test
-
+ 75_array_in_struct_init.test \
+ 76_dollars_in_identifiers.test
 
 # 34_array_assignment.test -- array assignment is not in C standard
 
@@ -121,15 +121,19 @@ ARGS =
 31_args.test : ARGS = arg1 arg2 arg3 arg4 arg5
 46_grep.test : ARGS = '[^* ]*[:a:d: ]+\:\*-/: $$' 46_grep.c
 
+# Some tests might need different flags
+FLAGS =
+76_dollars_in_identifiers.test : FLAGS = -fdollars-in-identifiers
+
 all test: $(filter-out $(SKIP),$(TESTS))
 
 %.test: %.c
 	@echo Test: $*...
 
-	@$(TCC) -run $< $(ARGS) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output || true
+	@$(TCC) -run $(FLAGS) $< $(ARGS) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output || true
 	@diff -Nbu $*.expect $*.output && rm -f $*.output
 
-	@($(TCC) $< -o $*.exe && ./$*.exe $(ARGS)) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output2 || true
+	@($(TCC) $(FLAGS) $< -o $*.exe && ./$*.exe $(ARGS)) 2>&1 | grep -v 'warning: soft float ABI currently not supported: default to softfp' >$*.output2 || true
 	@diff -Nbu $*.expect $*.output2 && rm -f $*.output2 $*.exe
 
 clean:
-- 
2.3.0

_______________________________________________
Tinycc-devel mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/tinycc-devel

Reply via email to