* Add rules for ObjC files @ 2002-10-03 18:53 Adam Fedor 2002-10-04 2:25 ` Klee Dienes 0 siblings, 1 reply; 10+ messages in thread From: Adam Fedor @ 2002-10-03 18:53 UTC (permalink / raw) To: gdb-patches [-- Attachment #1: Type: text/plain, Size: 330 bytes --] This patch adds rules for the ObjC files but does not enable them. 2002-10-03 Adam Fedor <fedor@gnu.org> * Makefile.in (SFILES): Add objc-exp.y objc-lang.c. (objc_lang_h): Define. (YYFILES): Add objc-exp.tab.c. (local-maintainer-clean): Remove objc-exp.tab.c. (objc-exp.tab.c, objc-exp.tab.o, objc-lang.o): New target. [-- Attachment #2: objc2.patch --] [-- Type: text/plain, Size: 3382 bytes --] ? gdb1.ChangeLog ? gdb1.patch ? make2.patch ? objc2.Ch ? objc2.patch Index: gdb/Makefile.in =================================================================== RCS file: /cvs/src/src/gdb/Makefile.in,v retrieving revision 1.268 diff -u -p -r1.268 Makefile.in --- gdb/Makefile.in 2 Oct 2002 21:33:58 -0000 1.268 +++ gdb/Makefile.in 4 Oct 2002 01:47:49 -0000 @@ -548,6 +548,7 @@ SFILES = ada-exp.y ada-lang.c ada-typepr macrotab.c macroexp.c macrocmd.c macroscope.c main.c maint.c \ mdebugread.c memattr.c mem-break.c minsyms.c mipsread.c \ nlmread.c \ + objc-exp.y objc-lang.c \ objfiles.c osabi.c \ p-exp.y p-lang.c p-typeprint.c p-valprint.c parse.c printcmd.c \ regcache.c remote.c \ @@ -688,6 +689,7 @@ mipsnbsd_tdep_h = mipsnbsd-tdep.h monitor_h = monitor.h nbsd_tdep_h = nbsd-tdep.h ns32k_tdep_h = ns32k-tdep.h $(osabi_h) +objc_lang_h = objc-lang.h objfiles_h = objfiles.h $(gdb_obstack_h) $(symfile_h) ocd_h = ocd.h osabi_h = osabi.h @@ -864,6 +866,7 @@ SUBDIRS = @SUBDIRS@ # For now, shortcut the "configure GDB for fewer languages" stuff. YYFILES = c-exp.tab.c \ + objc-exp.tab.c \ ada-exp.tab.c \ jv-exp.tab.c \ f-exp.tab.c m2-exp.tab.c p-exp.tab.c @@ -1126,6 +1129,7 @@ local-maintainer-clean: @echo "it deletes files that may require special tools to rebuild." rm -f c-exp.tab.c \ ada-lex.c ada-exp.tab.c \ + objc-exp.tab.c \ jv-exp.tab \ f-exp.tab.c m2-exp.tab.c p-exp.tab.c rm -f TAGS $(INFOFILES) @@ -1221,6 +1225,22 @@ c-exp.tab.c: c-exp.y mv c-exp.new ./c-exp.tab.c # See comments above ... +.PRECIOUS: objc-exp.tab.c +objc-exp.tab.o: objc-exp.tab.c +objc-exp.tab.c: objc-exp.y + $(SHELL) $(YLWRAP) "$(YACC)" $(srcdir)/objc-exp.y y.tab.c objc-exp.tmp -- $(YFLAGS) + -sed -e '/extern.*malloc/d' \ + -e '/extern.*realloc/d' \ + -e '/extern.*free/d' \ + -e '/include.*malloc.h/d' \ + -e 's/malloc/xmalloc/g' \ + -e 's/realloc/xrealloc/g' \ + -e '/^#line.*y.tab.c/d' \ + < objc-exp.tmp > objc-exp.new + -rm objc-exp.tmp + mv objc-exp.new ./objc-exp.tab.c + +# See comments above ... .PRECIOUS: jv-exp.tab.c jv-exp.tab.o: jv-exp.tab.c jv-exp.tab.c: jv-exp.y @@ -1436,6 +1456,10 @@ c-exp.tab.o: c-exp.tab.c $(defs_h) $(gdb $(charset_h) \ $(symfile_h) $(objfiles_h) +objc-exp.tab.o: objc-exp.tab.c $(objc_lang_h) $(defs_h) $(expression_h) \ + $(gdbtypes_h) $(language_h) $(parser_defs_h) $(symtab_h) $(value_h) \ + $(bfd_h) $(objfiles_h) $(symfile_h) + jv-exp.tab.o: jv-exp.tab.c jv-lang.h $(defs_h) $(expression_h) \ $(gdbtypes_h) $(language_h) $(parser_defs_h) $(symtab_h) $(value_h) \ $(bfd_h) $(objfiles_h) $(symfile_h) @@ -1938,6 +1962,11 @@ ns32k-tdep.o: ns32k-tdep.c $(defs_h) $(f ns32knbsd-nat.o: ns32knbsd-nat.c $(defs_h) $(inferior_h) $(target_h) \ $(gdbcore_h) $(regcache_h) ns32knbsd-tdep.o: ns32knbsd-tdep.c $(defs_h) $(ns32k_tdep_h) $(gdb_string_h) +objc-lang.o: objc-lang.c $(defs_h) $(symtab_h) $(gdbtypes_h) $(expression_h) \ + $(parser_defs_h) $(language_h) $(c_lang_h) $(objc_lang_h) \ + $(complaints_h) $(value_h) $(symfile_h) $(objfiles_h) \ + $(gdb_string_h) $(target_h) $(gdbcore_h) $(gdbcmd_h) $(frame_h) \ + $(gdb_regex_h) $(regcache_h) objfiles.o: objfiles.c $(defs_h) $(bfd_h) $(symtab_h) $(symfile_h) \ $(objfiles_h) $(gdb_stabs_h) $(target_h) $(bcache_h) $(gdb_stat_h) \ $(gdb_obstack_h) $(gdb_string_h) $(breakpoint_h) $(mmalloc_h) ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-03 18:53 Add rules for ObjC files Adam Fedor @ 2002-10-04 2:25 ` Klee Dienes 2002-10-04 9:07 ` Adam Fedor ` (2 more replies) 0 siblings, 3 replies; 10+ messages in thread From: Klee Dienes @ 2002-10-04 2:25 UTC (permalink / raw) To: Adam Fedor; +Cc: gdb-patches [-- Attachment #1: Type: text/plain, Size: 975 bytes --] I'm not sure if this is something you want to hassle with at the moment, or if you'd prefer to let it wait as a modification once a working version of the Objective-C patches are successfully committed. But just as a heads-up, I should mention that in more recent versions of our GDB, we've folded in all of the Objective-C support directly into c-exp.y, and removed objc-exp.y as a file entirely. Most of objc-exp.y was always just an out-of-date copy of c-exp.y, anyway; moving the (rather small) changes into c-exp.y directly not only allowed us to track changes to the C parser much more smoothly, it should also allow for much better Objective-C++ support. You'll probably want to look at the most recent version of our GDB tree (http://www.opensource.apple.com/projects/darwin/6.0/source/other/gdb- 20020918.tar.gz; no registration or anything similar required), and check out our changes to c-exp.y; I've attached them for your convenience. [-- Attachment #2: objc.diffs --] [-- Type: application/octet-stream, Size: 9129 bytes --] diff -u -r1.1.1.8 c-exp.y --- c-exp.y 2002/09/26 20:56:42 1.1.1.8 +++ c-exp.y 2002/10/04 08:31:39 @@ -46,9 +46,11 @@ #include "parser-defs.h" #include "language.h" #include "c-lang.h" +#include "objc-lang.h" /* For Obj-C language constructs. */ #include "bfd.h" /* Required by objfiles.h. */ #include "symfile.h" /* Required by objfiles.h. */ #include "objfiles.h" /* For have_full_symbols and have_partial_symbols */ +#include "completer.h" /* For skip_quoted. */ #include "charset.h" /* Flag indicating we're dealing with HP-compiled objects */ @@ -140,6 +142,7 @@ struct block *bval; enum exp_opcode opcode; struct internalvar *ivar; + struct objc_class_str class; struct type **tvec; int *ivec; @@ -173,8 +176,11 @@ nonterminal "name", which matches either NAME or TYPENAME. */ %token <sval> STRING -%token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */ +%token <sval> NSSTRING /* Obj-C Foundation "NSString" literal */ +%token <sval> SELECTOR /* Obj-C "@selector" pseudo-operator */ +%token <ssym> NAME /* BLOCKNAME defined below to give it higher precedence. */ %token <tsym> TYPENAME +%token <class> CLASSNAME /* Obj-C Class name */ %type <sval> name %type <ssym> name_not_typename %type <tsym> typename @@ -324,6 +330,71 @@ { write_exp_elt_opcode (BINOP_SUBSCRIPT); } ; +/* The rules below parse Obj-C message calls of the form: + '[' target selector {':' argument}* ']' */ + +exp : '[' TYPENAME + { + CORE_ADDR class; + + class = lookup_objc_class (copy_name ($2.stoken)); + if (class == 0) + error ("%s is not an ObjC Class", + copy_name ($2.stoken)); + write_exp_elt_opcode (OP_LONG); + write_exp_elt_type (builtin_type_int); + write_exp_elt_longcst ((LONGEST) class); + write_exp_elt_opcode (OP_LONG); + start_msglist(); + } + msglist ']' + { write_exp_elt_opcode (OP_MSGCALL); + end_msglist(); + write_exp_elt_opcode (OP_MSGCALL); + } + ; + +exp : '[' CLASSNAME + { + write_exp_elt_opcode (OP_LONG); + write_exp_elt_type (builtin_type_int); + write_exp_elt_longcst ((LONGEST) $2.class); + write_exp_elt_opcode (OP_LONG); + start_msglist(); + } + msglist ']' + { write_exp_elt_opcode (OP_MSGCALL); + end_msglist(); + write_exp_elt_opcode (OP_MSGCALL); + } + ; + +exp : '[' exp + { start_msglist(); } + msglist ']' + { write_exp_elt_opcode (OP_MSGCALL); + end_msglist(); + write_exp_elt_opcode (OP_MSGCALL); + } + ; + +msglist : name + { add_msglist(&$1, 0); } + | msgarglist + ; + +msgarglist : msgarg + | msgarglist msgarg + ; + +msgarg : name ':' exp + { add_msglist(&$1, 1); } + | ':' exp /* Unnamed argument. */ + { add_msglist(0, 1); } + | ',' exp /* Variable number of arguments. */ + { add_msglist(0, 0); } + ; + exp : exp '(' /* This is to save the value of arglist_len being accumulated by an outer function call. */ @@ -499,6 +570,13 @@ /* Already written by write_dollar_variable. */ ; +exp : SELECTOR + { + write_exp_elt_opcode (OP_SELECTOR); + write_exp_string ($1); + write_exp_elt_opcode (OP_SELECTOR); } + + exp : SIZEOF '(' type ')' %prec UNARY { write_exp_elt_opcode (OP_LONG); write_exp_elt_type (builtin_type_int); @@ -531,6 +609,14 @@ write_exp_elt_opcode (OP_ARRAY); } ; +exp : NSSTRING /* ObjC NextStep NSString constant + * of the form '@' '"' string '"'. + */ + { write_exp_elt_opcode (OP_NSSTRING); + write_exp_string ($1); + write_exp_elt_opcode (OP_NSSTRING); } + ; + /* C++. */ exp : THIS { write_exp_elt_opcode (OP_THIS); @@ -804,6 +899,14 @@ typebase /* Implements (approximately): (type-qualifier)* type-specifier */ : TYPENAME { $$ = $1.type; } + | CLASSNAME + { + if ($1.type == NULL) + error ("No symbol \"%s\" in current context.", + copy_name($1.stoken)); + else + $$ = $1.type; + } | INT_KEYWORD { $$ = builtin_type_int; } | LONG @@ -951,7 +1054,8 @@ name : NAME { $$ = $1.stoken; } | BLOCKNAME { $$ = $1.stoken; } | TYPENAME { $$ = $1.stoken; } - | NAME_OR_INT { $$ = $1.stoken; } + | CLASSNAME { $$ = $1.stoken; } + | NAME_OR_INT { $$ = $1.stoken; } ; name_not_typename : NAME @@ -1239,6 +1343,7 @@ int c; int namelen; unsigned int i; + int tokchr; char *tokstart; char *tokptr; int tempbufindex; @@ -1284,7 +1389,7 @@ return tokentab2[i].token; } - switch (c = *tokstart) + switch (tokchr = *tokstart) { case 0: /* If we were just scanning the result of a macro expansion, @@ -1331,7 +1436,8 @@ c = *lexptr++; if (c != '\'') { - namelen = skip_quoted (tokstart) - tokstart; + namelen = skip_quoted (tokstart, get_gdb_completer_word_break_characters ()) + - tokstart; if (namelen > 2) { lexptr = tokstart + namelen; @@ -1349,14 +1455,14 @@ case '(': paren_depth++; lexptr++; - return c; + return '('; case ')': if (paren_depth == 0) return 0; paren_depth--; lexptr++; - return c; + return ')'; case ',': if (comma_terminates @@ -1364,7 +1470,7 @@ && ! scanning_macro_expansion ()) return 0; lexptr++; - return c; + return ','; case '.': /* Might be a floating point number. */ @@ -1445,7 +1572,6 @@ case '^': case '~': case '!': - case '@': case '<': case '>': case '[': @@ -1457,8 +1583,42 @@ case '}': symbol: lexptr++; - return c; + return tokchr; + case '@': + if (strncmp (tokstart, "@selector", 9) == 0) + { + tokptr = strchr (tokstart, '('); + if (tokptr == NULL) + error ("Missing '(' in @selector(...)"); + tempbufindex = 0; + /* skip the '(' */ + tokptr++; + do { + /* Grow the static temp buffer if necessary, including allocating + the first one on demand. */ + if (tempbufindex + 1 >= tempbufsize) + { + tempbuf = (char *) realloc (tempbuf, tempbufsize += 64); + } + tempbuf[tempbufindex++] = *tokptr++; + } while ((*tokptr != ')') && (*tokptr != '\0')); + if (*tokptr++ != ')') + error ("Missing ')' in @selector(...)"); + tempbuf[tempbufindex] = '\0'; + yylval.sval.ptr = tempbuf; + yylval.sval.length = tempbufindex; + lexptr = tokptr; + return SELECTOR; + } + if (tokstart[1] != '"') + { + lexptr++; + return tokchr; + } + /* Obj-C NSString constant: fall through and parse like STRING. */ + tokstart++; + case '"': /* Build the gdb internal form of the input string in tempbuf, @@ -1522,13 +1682,13 @@ yylval.sval.ptr = tempbuf; yylval.sval.length = tempbufindex; lexptr = tokptr; - return (STRING); + return (tokchr == '@' ? NSSTRING : STRING); } - if (!(c == '_' || c == '$' - || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))) + if (!(tokchr == '_' || tokchr == '$' || + (tokchr >= 'a' && tokchr <= 'z') || (tokchr >= 'A' && tokchr <= 'Z'))) /* We must have come across a bad character (e.g. ';'). */ - error ("Invalid character '%c' in expression.", c); + error ("Invalid character '%c' in expression.", tokchr); /* It's a name. See how long it is. */ namelen = 0; @@ -1672,16 +1832,22 @@ char *tmp = copy_name (yylval.sval); struct symbol *sym; int is_a_field_of_this = 0; + int *need_this; int hextype; + if (current_language->la_language == language_cplus + || current_language->la_language == language_objc + || current_language->la_language == language_objcplus) + need_this = &is_a_field_of_this; + else + need_this = (int *) NULL; + sym = lookup_symbol (tmp, expression_context_block, - VAR_NAMESPACE, - current_language->la_language == language_cplus - ? &is_a_field_of_this : (int *) NULL, + VAR_NAMESPACE, need_this, (struct symtab **) NULL); /* Call lookup_symtab, not lookup_partial_symtab, in case there are no psymtabs (coff, xcoff, or some future change to blow away the - psymtabs once once symbols are read). */ + psymtabs once symbols are read). */ if (sym && SYMBOL_CLASS (sym) == LOC_BLOCK) { yylval.ssym.sym = sym; @@ -1794,6 +1960,23 @@ if ((yylval.tsym.type = lookup_primitive_typename (tmp)) != 0) return TYPENAME; + /* See if it's an Obj-C classname. */ + if (!sym && should_lookup_objc_class ()) + { + extern struct symbol *lookup_struct_typedef (); + sym = lookup_struct_typedef (tmp, expression_context_block, 1); + if (sym) + { + CORE_ADDR Class = lookup_objc_class (tmp); + if (Class) + { + yylval.class.class = Class; + yylval.class.type = SYMBOL_TYPE (sym); + return CLASSNAME; + } + } + } + /* Input names that aren't symbols but ARE valid hex numbers, when the input radix permits them, can be names or numbers depending on the parse. Note we support radixes > 16 here. */ [-- Attachment #3: Type: text/plain, Size: 482 bytes --] One downside to having the changes directly in c-exp.y is that I don't know of any good way to conditionalize them; though I am by no means a bison guru. The following diffs are unrelated to Objective-C; I'm attaching them just for your reference (the ones in generic.diffs are likely to be removed in our sources soon as well; the ones in number-parsing.diffs remove a memory leak caused by calling parse_number on invalid, but are unrelated to the Objective-C changes). [-- Attachment #4: number-parsing.diffs --] [-- Type: application/octet-stream, Size: 3114 bytes --] Index: c-exp.y =================================================================== RCS file: /cvs/Darwin/src/live/cygnus/src/gdb/c-exp.y,v retrieving revision 1.1.1.8 diff -u -r1.1.1.8 c-exp.y --- c-exp.y 2002/09/26 20:56:42 1.1.1.8 +++ c-exp.y 2002/10/04 08:33:41 @@ -1384,19 +1490,23 @@ case '9': { /* It's a number. */ - int got_dot = 0, got_e = 0, toktype; + /* Initialize toktype to anything other than ERROR. */ + int got_dot = 0, got_e = 0, toktype = FLOAT; register char *p = tokstart; int hex = input_radix > 10; + int local_radix = input_radix; - if (c == '0' && (p[1] == 'x' || p[1] == 'X')) + if (tokchr == '0' && (p[1] == 'x' || p[1] == 'X')) { p += 2; hex = 1; + local_radix = 16; } - else if (c == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D')) + else if (tokchr == '0' && (p[1]=='t' || p[1]=='T' || p[1]=='d' || p[1]=='D')) { p += 2; hex = 0; + local_radix = 10; } for (;; ++p) @@ -1404,25 +1514,42 @@ /* This test includes !hex because 'e' is a valid hex digit and thus does not indicate a floating point number when the radix is hex. */ - if (!hex && !got_e && (*p == 'e' || *p == 'E')) - got_dot = got_e = 1; + + if (!hex && (*p == 'e' || *p == 'E')) + if (got_e) + toktype = ERROR; /* only one 'e' in a float */ + else + got_e = 1; /* This test does not include !hex, because a '.' always indicates a decimal floating point number regardless of the radix. */ - else if (!got_dot && *p == '.') - got_dot = 1; - else if (got_e && (p[-1] == 'e' || p[-1] == 'E') - && (*p == '-' || *p == '+')) + else if (*p == '.') + if (got_dot) + toktype = ERROR; /* only one '.' in a float */ + else + got_dot = 1; + else if (got_e && (p[-1] == 'e' || p[-1] == 'E') && + (*p == '-' || *p == '+')) /* This is the sign of the exponent, not the end of the number. */ continue; - /* We will take any letters or digits. parse_number will - complain if past the radix, or if L or U are not final. */ - else if ((*p < '0' || *p > '9') - && ((*p < 'a' || *p > 'z') - && (*p < 'A' || *p > 'Z'))) - break; + /* Always take decimal digits; parse_number handles radix error */ + else if (*p >= '0' && *p <= '9') + continue; + /* We will take letters only if hex is true, and only + up to what the input radix would permit. FSF was content + to rely on parse_number to validate; but it leaks. */ + else if (*p >= 'a' && *p <= 'z') { + if (!hex || *p >= ('a' + local_radix - 10)) + toktype = ERROR; + } + else if (*p >= 'A' && *p <= 'Z') { + if (!hex || *p >= ('A' + local_radix - 10)) + toktype = ERROR; + } + else break; } - toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval); + if (toktype != ERROR) + toktype = parse_number (tokstart, p - tokstart, got_dot|got_e, &yylval); if (toktype == ERROR) { char *err_copy = (char *) alloca (p - tokstart + 1); [-- Attachment #5: Type: text/plain, Size: 2 bytes --] [-- Attachment #6: generic.diffs --] [-- Type: application/octet-stream, Size: 1216 bytes --] diff -u -r1.1.1.8 c-exp.y --- c-exp.y 2002/09/26 20:56:42 1.1.1.8 +++ c-exp.y 2002/10/04 08:31:39 @@ -659,7 +745,7 @@ builtin_type_int); } else - if (!have_full_symbols () && !have_partial_symbols ()) + if (!have_full_symbols () && !have_partial_symbols () && !have_minimal_symbols ()) error ("No symbol table is loaded. Use the \"file\" command."); else error ("No symbol \"%s\" in current context.", name); @@ -714,7 +809,7 @@ lookup_function_type (builtin_type_int), builtin_type_int); } - else if (!have_full_symbols () && !have_partial_symbols ()) + else if (!have_full_symbols () && !have_partial_symbols () && !have_minimal_symbols ()) error ("No symbol table is loaded. Use the \"file\" command."); else error ("No symbol \"%s\" in current context.", @@ -1825,5 +2008,8 @@ if (prev_lexptr) lexptr = prev_lexptr; - error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr); + if (*lexptr == '\0') + error("A %s near end of expression.", (msg ? msg : "error")); + else + error ("A %s in expression, near `%s'.", (msg ? msg : "error"), lexptr); } [-- Attachment #7: Type: text/plain, Size: 409 bytes --] On Thursday, October 3, 2002, at 09:54 PM, Adam Fedor wrote: > This patch adds rules for the ObjC files but does not enable them. > > 2002-10-03 Adam Fedor <fedor@gnu.org> > > * Makefile.in (SFILES): Add objc-exp.y objc-lang.c. > (objc_lang_h): Define. > (YYFILES): Add objc-exp.tab.c. > (local-maintainer-clean): Remove objc-exp.tab.c. > (objc-exp.tab.c, objc-exp.tab.o, objc-lang.o): New target. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 2:25 ` Klee Dienes @ 2002-10-04 9:07 ` Adam Fedor 2002-10-04 9:49 ` Stan Shebs 2002-10-21 12:08 ` Andrew Cagney 2 siblings, 0 replies; 10+ messages in thread From: Adam Fedor @ 2002-10-04 9:07 UTC (permalink / raw) To: Klee Dienes; +Cc: gdb-patches Klee Dienes wrote: > I'm not sure if this is something you want to hassle with at the > moment, or if you'd prefer to let it wait as a modification once a > working version of the Objective-C patches are successfully committed. > > But just as a heads-up, I should mention that in more recent versions > of our GDB, we've folded in all of the Objective-C support directly > into c-exp.y, and removed objc-exp.y as a file entirely. Most of > objc-exp.y was always just an out-of-date copy of c-exp.y, anyway; > moving the (rather small) changes into c-exp.y directly not only > allowed us to track changes to the C parser much more smoothly, it > should also allow for much better Objective-C++ support. > Good point. On second though, I think I will withdraw this patch for now. I'll work on getting the other changes in, and by that time I might get around to looking at the most recent Apple changes and maybe I'll be be able to convince the gdb gods to switch directly to using Objective-C in c-exp.y -- Adam Fedor, Digital Optics Corp. | I'm glad I hate spinach, because http://www.doc.com | if I didn't, I'd eat it, and you | know how I hate the stuff. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 2:25 ` Klee Dienes 2002-10-04 9:07 ` Adam Fedor @ 2002-10-04 9:49 ` Stan Shebs 2002-10-04 13:20 ` Klee Dienes 2002-10-21 12:08 ` Andrew Cagney 2 siblings, 1 reply; 10+ messages in thread From: Stan Shebs @ 2002-10-04 9:49 UTC (permalink / raw) To: Klee Dienes; +Cc: Adam Fedor, gdb-patches Klee Dienes wrote: > I'm not sure if this is something you want to hassle with at the > moment, or if you'd prefer to let it wait as a modification once a > working version of the Objective-C patches are successfully committed. > > But just as a heads-up, I should mention that in more recent versions > of our GDB, we've folded in all of the Objective-C support directly > into c-exp.y, and removed objc-exp.y as a file entirely. Most of > objc-exp.y was always just an out-of-date copy of c-exp.y, anyway; > moving the (rather small) changes into c-exp.y directly not only > allowed us to track changes to the C parser much more smoothly, it > should also allow for much better Objective-C++ support. > > You'll probably want to look at the most recent version of our GDB > tree > (http://www.opensource.apple.com/projects/darwin/6.0/source/other/gdb- > 20020918.tar.gz; no registration or anything similar required), and > check out our changes to c-exp.y; I've attached them for your > convenience. > > One downside to having the changes directly in c-exp.y is that I don't > know of any good way to conditionalize them; though I am by no means a > bison guru. ObjC is supposed to be a strict superset of C, so at least in theory, extensions don't need to be conditionalized at all, or they can be disallowed after parsing, if you wanted to have a "strict C mode" (although I note that the little array@45 extension is always available, even though it's not valid C). Stan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 9:49 ` Stan Shebs @ 2002-10-04 13:20 ` Klee Dienes 2002-10-04 14:49 ` Michael Snyder 0 siblings, 1 reply; 10+ messages in thread From: Klee Dienes @ 2002-10-04 13:20 UTC (permalink / raw) To: Stan Shebs; +Cc: Adam Fedor, gdb-patches I definitely agree there's no need to conditionalize them long-term. I just mean there's no way that I know of to check them in with an #ifdef WITH_OBJC for the period where the other changes that they depend on are still being submitted. The objc-lang.y approach has the advantage that the file can be submitted, and optionally enabled or disabled in the Makefile (as I believe Adam was planning to do). On Friday, October 4, 2002, at 12:48 PM, Stan Shebs wrote: > ObjC is supposed to be a strict superset of C, so at least in theory, > extensions don't need to be conditionalized at all, or they can be > disallowed after parsing, if you wanted to have a "strict C mode" > (although I note that the little array@45 extension is always > available, > even though it's not valid C). ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 13:20 ` Klee Dienes @ 2002-10-04 14:49 ` Michael Snyder 2002-10-04 15:31 ` Kevin Buettner 0 siblings, 1 reply; 10+ messages in thread From: Michael Snyder @ 2002-10-04 14:49 UTC (permalink / raw) To: Klee Dienes; +Cc: Stan Shebs, Adam Fedor, gdb-patches Klee Dienes wrote: > > I definitely agree there's no need to conditionalize them long-term. I > just mean there's no way that I know of to check them in with an #ifdef > WITH_OBJC for the period where the other changes that they depend on > are still being submitted. The objc-lang.y approach has the advantage > that the file can be submitted, and optionally enabled or disabled in > the Makefile (as I believe Adam was planning to do). I agree that ObjC is to C as C++ is to C, and therefore its grammar can legitimately go into c-exp.y. If cxx-like behavior is not disabled when debugging C, then objc-like behavior shouldn't need to be either (unles there's a conflict). But, just to get over the initial hurdle, it might be easier to check the grammar in as if it was a whole new language (and thus can't break C debugging) -- then merge them later. Michael > > On Friday, October 4, 2002, at 12:48 PM, Stan Shebs wrote: > > > ObjC is supposed to be a strict superset of C, so at least in theory, > > extensions don't need to be conditionalized at all, or they can be > > disallowed after parsing, if you wanted to have a "strict C mode" > > (although I note that the little array@45 extension is always > > available, > > even though it's not valid C). ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 14:49 ` Michael Snyder @ 2002-10-04 15:31 ` Kevin Buettner 0 siblings, 0 replies; 10+ messages in thread From: Kevin Buettner @ 2002-10-04 15:31 UTC (permalink / raw) To: Michael Snyder, Klee Dienes; +Cc: Stan Shebs, Adam Fedor, gdb-patches On Oct 4, 2:47pm, Michael Snyder wrote: > But, just to get over the initial hurdle, it might be easier to > check the grammar in as if it was a whole new language (and thus > can't break C debugging) -- then merge them later. I think that's a good idea. Kevin ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-04 2:25 ` Klee Dienes 2002-10-04 9:07 ` Adam Fedor 2002-10-04 9:49 ` Stan Shebs @ 2002-10-21 12:08 ` Andrew Cagney 2002-10-21 15:40 ` Adam Fedor 2 siblings, 1 reply; 10+ messages in thread From: Andrew Cagney @ 2002-10-21 12:08 UTC (permalink / raw) To: Klee Dienes, Adam Fedor; +Cc: gdb-patches > Klee Dienes wrote: > > I'm not sure if this is something you want to hassle with at the moment, or if you'd prefer to let it wait as a modification once a working version of the Objective-C patches are successfully committed. > > But just as a heads-up, I should mention that in more recent versions of our GDB, we've folded in all of the Objective-C support directly into c-exp.y, and removed objc-exp.y as a file entirely. Most of objc-exp.y was always just an out-of-date copy of c-exp.y, anyway; moving the (rather small) changes into c-exp.y directly not only allowed us to track changes to the C parser much more smoothly, it should also allow for much better Objective-C++ support. > > You'll probably want to look at the most recent version of our GDB tree (http://www.opensource.apple.com/projects/darwin/6.0/source/other/gdb- 20020918.tar.gz; no registration or anything similar required), and check out our changes to c-exp.y; I've attached them for your convenience. > > One downside to having the changes directly in c-exp.y is that I don't know of any good way to conditionalize them; though I am by no means a bison guru. > > ObjC is supposed to be a strict superset of C, so at least in theory, > extensions don't need to be conditionalized at all, or they can be > disallowed after parsing, if you wanted to have a "strict C mode" > (although I note that the little array@45 extension is always available, > even though it's not valid C). (time passes) (array@45 is documented as a GDB CLI extension). Keeping the objective C .y separate from the C .y, I think, is a better long term strategy. While it will mean that someone needs to keep the two files in sync, it also means that the objective C, C and C++ parsers are guarenteed to not stomp on each others toes. Andrew ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-21 12:08 ` Andrew Cagney @ 2002-10-21 15:40 ` Adam Fedor 2002-10-24 20:33 ` Adam Fedor 0 siblings, 1 reply; 10+ messages in thread From: Adam Fedor @ 2002-10-21 15:40 UTC (permalink / raw) To: Andrew Cagney; +Cc: Klee Dienes, gdb-patches Andrew Cagney wrote: >> Klee Dienes wrote: >> ObjC is supposed to be a strict superset of C, so at least in theory, >> extensions don't need to be conditionalized at all, or they can be >> disallowed after parsing, if you wanted to have a "strict C mode" >> (although I note that the little array@45 extension is always available, >> even though it's not valid C). > > > (time passes) > > (array@45 is documented as a GDB CLI extension). > > Keeping the objective C .y separate from the C .y, I think, is a better > long term strategy. While it will mean that someone needs to keep the > two files in sync, it also means that the objective C, C and C++ parsers > are guarenteed to not stomp on each others toes. > But aren't the C and C++ parsers combined? It would probably be good to keep the Objective-C parser separate for a while until people get used to the idea. However, eventually, gcc will support mixing Objective-C and C++ (Objective-C++) and it will be very contrived to have separate parsers for each language. The languages are quite compatible. The only syntax Objective-C adds is the message call syntax: [MyObject myMethod: arg1 here: arg2] and @something (where 'something' can be a string or one of a few keywords defined in Objective-C) which looks almost nothing like what you would encounter in C or C++. -- Adam Fedor, Digital Optics Corp. | I'm glad I hate spinach, because http://www.doc.com | if I didn't, I'd eat it, and you | know how I hate the stuff. ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: Add rules for ObjC files 2002-10-21 15:40 ` Adam Fedor @ 2002-10-24 20:33 ` Adam Fedor 0 siblings, 0 replies; 10+ messages in thread From: Adam Fedor @ 2002-10-24 20:33 UTC (permalink / raw) To: gdb-patches; +Cc: Andrew Cagney, Klee Dienes Andrew Cagney wrote: >> Klee Dienes wrote: >> ObjC is supposed to be a strict superset of C, so at least in theory, >> extensions don't need to be conditionalized at all, or they can be >> disallowed after parsing, if you wanted to have a "strict C mode" >> (although I note that the little array@45 extension is always available, >> even though it's not valid C). > > > > (time passes) > > (array@45 is documented as a GDB CLI extension). > > Keeping the objective C .y separate from the C .y, I think, is a > better long term strategy. While it will mean that someone needs to > keep the two files in sync, it also means that the objective C, C and > C++ parsers are guarenteed to not stomp on each others toes. > Well since the parsers probably aren't going to be combined yet :-) I'll un-withdraw this patch. Can someone approve it? -- Adam Fedor, Digital Optics Corp. | I'm glad I hate spinach, because http://www.doc.com | if I didn't, I'd eat it, and you | know how I hate the stuff. ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2002-10-25 3:33 UTC | newest] Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2002-10-03 18:53 Add rules for ObjC files Adam Fedor 2002-10-04 2:25 ` Klee Dienes 2002-10-04 9:07 ` Adam Fedor 2002-10-04 9:49 ` Stan Shebs 2002-10-04 13:20 ` Klee Dienes 2002-10-04 14:49 ` Michael Snyder 2002-10-04 15:31 ` Kevin Buettner 2002-10-21 12:08 ` Andrew Cagney 2002-10-21 15:40 ` Adam Fedor 2002-10-24 20:33 ` Adam Fedor
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox