| Commit message (Collapse) | Author | Age |
... | |
| |
|
|
|
|
|
|
|
|
| |
Changed Slice parser to reject identifiers beginning with "Ice", unless
the --ice option is used. Changed Slice parser to disallow identifiers
that have a trailing "Operations", "Holder", "Helper", "Prx", or "Ptr",
to avoid clashes with language mappings. Fixed tests and remaining code
base to work correctly with the changed rules.
|
|
|
|
| |
operation with local parameters, etc.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
compatibility for semicolon syntax for out parameters, removed unused
printError parameters, move error reporting for changes in meaning from
Grammar.y to Parser.cpp, removed one erroneous createClassDecl call
that caused an assertion failure if a non-existent class name was used
in a parameter declaration, improved diagnostics for parameters that
are out of order, fixed tests to match new output.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
That way, we can check whether meaning changes as identifiers are
introduced into parameter declarartions.
Changes were quite extensive because one thing dragged another behind it...
Got rid of some of the pesky parse errors caused by returning zero from
some creation operations. In general, it seems easier to, whenever
possible, to create a dummy instance of something that doesn't quite
parse or doesn't quite get through a semantic check. This avoids
calling YYERROR, which can make a big mess of the scope stack. (I got
stuck on this for quite a long time before I figured out what was going
on.)
Took the opportunity to get rid of the awkward parsing for parameter lists.
We now have only a single parameters non-terminal, which simplifies
things (and also got rid of the one remaining shift/reduce conflict in
the grammar).
Updated all the code generators to work with the new structure for the
syntax tree.
Kept a rather ugly hack in Grammar.y to still permit use of semicolons to
indicate out params. This will go with stable_39, so I don't mind that
it's ugly for now.
|
|
|
|
|
|
|
|
|
| |
change halfway through a scope. This all works now, except for
operations because, currently, parameter lists are not in their own
scope (but they have to be).
Will add that tomorrow. Also want to improve diagnostics to show, if an
identifier changes meaning, where it was introduced with different
meaning.
|
|
|
|
|
|
|
|
|
|
|
| |
and dictionary definitions: the check is now down as a static member
function of the respective types, instead of being inside Contained,
before the type is created.
Ideally, Contained shouldn't be calling new directly. Instead, each type
should provide a static factory operation to create a new instance, and
all the semantic checks should happen inside that factory. I haven't
changed anything along those lines though -- want to talk to Marc
first. This is quite an interesting design problem...
|
|
|
|
|
| |
strings, or sequences and structs that only contain integral types or
strings.
|
| |
|
|
|
|
|
|
|
|
| |
Moved the definitions of Int64, Int64Min, and Int64Max into
IceUtil/Config.h.
Updated scanner and parser to use the new constant names. Also applied
style fixes to parser: INT16MIN -> Int16Min, BYTEMIN -> ByteMin, etc.
Changed Time.h and Time.cpp to use the Int64 type from IceUtil/Config.h.
|
|
|
|
| |
code.
|
|
|
|
|
| |
That was cleaner than polluting the generated files with the macro
definition over and over...
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
only.) I couldn't avoid adding a few #ifdefs because of the different
64-bit integer APIs across Linux and Windows. (#including config.h
wasn't an option because that would have created a circular dependency
between Ice and Slice.)
Added sufficient test cases to convince myself that things actually work as
intended.
Will compile under Windows now, so bear with me if things are broken under
Windows for a few minutes...
Some things that aren't quite right yet:
- No support for universal character names (\uxxxx)
- gcc appears to have a preprocessor bug. For example, preprocessing a file
containing a single '@' character just echos that '@' character to the
output. According to the C++ spec, '@' should be translated to its
universal character name (because it isn't part of the basic C++ source
character set).
- Why is the Slice string type mapped to std::string? Given that we are
supposed to support unicode for everything, shouldn't that be mapped to
std::wstring?
Once Windows compiles OK, I'll start on the Java code generation.
|
|
|
|
|
|
|
|
| |
quite correct yet for enums and long long). The other code generators
(java, xsl, etc.) ignore constants for now. Semantic checks are in
place, apart from enums.
Still more work to do -- this is just an intermediate check-in. (About to
test this on Windows too...)
|
|
|
|
| |
lookupContained, and lookupException.
|
|
|
|
|
|
| |
than once in a throws clause. Fixed a bug in the exception checking
code: ::e and e were mistaken as differing only in case in a throws
clause. Style fixes.
|
|
|
|
|
|
| |
now lives in Parser.cpp because it is used by both the parser and the
scanner.
Applied a few style fixes.
|
|
|
|
|
| |
definitions. Changed parser to write diagnostics to stdout instead of
stderr.
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
| |
stable_39, it will be a hard error.
Fixed Marc's review comments about style.
Made many member functions in Parser.cpp const. Still need to look at why
we get problems with IceUtil::dynamicCast if certain member functions
are made const.
|
| |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
if that name is already defined in one of the base classes/interfaces.
Added checks to disallow ambiguous multiple inheritance. The following (and
many variations thereof) is illegal:
interface A { void op(); };
interface B { long op(string s); };
interface C { void op(); };
interface D1 extends A, B { // Ambiguous multiple inheritance // ... };
interface D2 extends A, C { // Ambiguous multiple inheritance // ... };
Someone checked in a DOS-line ending file for Parser.h and Parser.cpp, so
the CVS up-to-date check failed and the diff obviously produced a lot
of noise. I think I merged everything correctly. There were a few
places where the style had changed, from "if(..." to "if (..." (and
similar for "while(...", and "for(...". The style guide says to use a
space before the parenthesis, so that's how I left things.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
and use an "out" keyword instead. The old syntax still works, but now
prints a warning. Fixed up all the test cases that got broken by this
and add a new test case for out-of-order in and out parameters.
Refactored the grammar somewhat because, initially, out params added
something like 50 shift/reduce conflicts. One shift/reduce conflict
remains, caused by the addition of ICE_OUT to the last production in
Grammar.y. We could avoid the conflict by removing ICE_OUT from that
production, but then we wouldn't catch other errors anymore, such as an
attempt to use "out" as the name of an operation or interface. I've
added a warning to the Makefile to expect 1 shift/reduce conflict when
Grammar.y is rebuilt.
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|