IDL-files containing
Own Id: OTP-4532
Uninitialized variables were used in
Own Id: OTP-4537
Aux Id: seq7666, ETOtr17107
Own Id: OTP-4538
The function
Own Id: OTP-4539
Operation names were always scoped in C server backend,
irrespective of the setting of the option
Own Id: OTP-4521
Aux Id: seq7643, ETOtr16925
For C backends generated code checks that the
Own Id: OTP-4471
The
Own Id: OTP-4471
Aux Id: seq7600, ETOtr16308
There was a memory leak in C backends in case there was a decoding error in a sequence with elements of basic type.
Own Id: OTP-4475
For for C backends, IDL structs defined within an interface were not mapped into C structs in appropriate include files.
Own Id: OTP-4481
Aux Id: seq7617
If the user, incorrectly, trap exit's but did not use the 'handle_info' compile option it would cause the server to terminate. The same problem occurred if someone, illegally, sent a message to the server. It could also happen for illegal oneway operations.
Own Id: OTP-4488
Invalid C code was generated for type short.
Own Id: OTP-4450
Aux Id: seq7582
Operation functions inherited by an interface were not placed in the map table in generated code for the C server backend. As a result such functions were not found by the switch function of the interface.
Own Id: OTP-4448
Aux Id: seq7582
A non-ANSI compliant construct in libic.a was changed.
Own Id: -
For Erlang and C back-ends an IC version stamp has been added to generated source code. This stamp i preserved in compiled target code.
For C backends an
If the assertion is inhibited, and a size calculation error is detected, an INTERNAL CORBA exception is set.
An internal reorganization of C backend generator code has
been done (addition of module
The typedef
Function parameters that are arrays, has been changed to be pointers to array slices, which are equivalent according to ANSI C.
The storage class specifier
Redundant type casts have been removed from generated code. Also some local "generic" variables have been renamed.
Module info vsn replaced by app_vsn.
Own Id: OTP-4341
IC-4.1.2 disabled the definition of float constants
beginning with a zero (e.g.
Own Id: OTP-4367
IC did not handle constant definitions correctly for char, string, wchar and wstring.
Own Id: OTP-4067, OTP-3222
IC did not recognize all reserved words defined in the
OMG specification (2.3.1). The new keywords are
Own Id: OTP-4368
It was not possible to use wchar or wstring inside a union body when using the Java backend.
Own Id: OTP-4365
The compile options
Own Id: OTP-4386, OTP-3231
If we typedef a sequence, which contains a struct or a union,
the access function
Own Id: OTP-4387
If an IDL file contained a prefix pragma, incorrect
IFR-id's was generated in the IFR-registration operation
Own Id: OTP-4388, OTP-4392
For C back-ends, when encodings/decodings failed, memory allocated for variable size parameter types was not freed.
Own Id: OTP-4391
Aux Id: seq7438, ETOtr14009
If an IDL file contained a multiple typedef
(e.g. typedef string str1, str2;), the
Own Id: OTP-4393
IC did not recognize octet-constants (e.g. const octet octetmax = 255;).
Own Id: OTP-4400
Negative 'long long' constants was not accepted (e.g. const long long MyConstant = -1;).
Own Id: OTP-4401
Merging of map's (___map___) using the ___merge___ function does not work.
Own Id: OTP-4323
Error in generated C decode/encode functions for union's with discriminator where the union has no value for all discriminator values. E.g. a union with discriminator boolean where only the discriminator value TRUE has a corresponding union value. Here is how such a thing would look in IDL:
\011 union OptXList switch(boolean) { \011 case TRUE: integer val; };
Own Id: OTP-4322
Scoped op calls ('{scoped_op_calls, true}') does not handle module/function names beginning with capital letter (e.g. Megaco should be 'Megaco') for oneway operations (handle_cast).
Own Id: OTP-4310
A bug is fixed on C-IDL erlang binaries that caused pointer error when residing inside sequences.
Own Id: OTP-4303
A new option 'multiple_be' is added that allows multiple backend generation for the same IDL file.
A bug is fixed on IDL types that contain underscore '_'.
Own Id: OTP-3710
A bug is fixed on IDL structs that caused scope confusion when types and fields of a struct had the same name.
Own Id: OTP-2893
The Erlang binary special type is introduced, that allows efficient transfer of binaries between Erlang and C.
Own Id:OTP-4107
A bug is fixed on noc backend which caused generation of erroneous code.
Own Id: OTP-3812
The pragma code option is extended to point specific functions on NOC backend, not only interfaces.
A bug in pragma prefix when including IDL files is fixed. This caused problems for Erlang-corba IFR registrations.
Own Id: OTP-3620
Limited support on multiple file module definitions.
The current version supports multiple file module definitions all backends except the c oriented backends.
Own Id: OTP-3550
A bug is fixed on Erlang backends.
The (recently) introduced generation of files describing sequence and array files were even true for included interfaces. In the case of some Erlang backends this were unnecessary.
Own Id: OTP-3485
New functionality added on Java and Erl_genserv backends.
On the Java client stub :
The Java client have now one more constructor function, that allows to continue with an already started connection.
The Environment variable is now declared as
On the Java server skeleton :
The Environment variable is now declared as
On the Erlang gen_server stub :
Own Id: OTP-3433
New types handled by IC.
The following OMG-IDL types are added in this compiler version :
long long
unsigned long long
wchar
wstring
Own Id: OTP-3331
TypeCode as built in type and access code files for array and sequence types.
As TypeCode is a
Access code files which contain information about TypeCode, ID and Name are now generated for user defined arrays and sequences.
Own Id: OTP-3392
A bug is fixed on preprocessor directive expansion.
When nested #ifdef - #ifndef directives, a bug caused improper included file expansion. This is fixed by repairing the preprocessor expansion function.
Own Id: OTP-3472
Build in Erlang types support for java-backends
The built-in Erlang types
Own Id: OTP-3348
Compile time preprocessor macro variable definitions
The preprocessor lacked possibility to accept user defined variables other than the one defined in IDL files. This limited the use of command-ruled IDL specifications. Now the build-in preprocessor allows the user to set variables by using the "preproc_flags" option the same way as using the "gcc" preprocessor.
Supported flags :
Own Id: OTP-3349
A bug on comment type expansion is fixed.
The comment type expansion were erroneous when inherited types (NOC backend). This is now fixed and the type naming agree with the scope of the inheritor interface.
Own Id: OTP-3346
The code generated for java backend is optimized due to use of streams instead for tuple classes when (un)marshalling message calls. Support for building clients using asynchronous client calls and effective multi-threaded servers.
Own Id: OTP-3310
The
Own Id: OTP-3311
While the constants are evaluated and behave well when used inside an IDL specification their C-export were not working properly. The constant export definitions were not generated well :
the declared C definition were erroneous ( the name did not always agree with the scope the constant were declared in ).
there were no C- definition generated for the c-server backend when the constants were declared inside an interface.
Own Id: OTP-3219
Due to optimizations in java backend, the stub initialization and usage differs than the previous version.
Client stub interface changes:
Client disconnects by calling the
All
instead for
All
instead for
Call reference extraction is available by the client function :
instead for previous function :
Server skeleton interface changes:
The implementation function no longer have to contain the
two (2) contractor functions (with
The parameter for the caller identity extraction function
There is a new
instead for the old one :
The
instead for the old one :
The
instead for the old one :
Some memory usage optimizations for the compiler were done.
A bug is fixed when C backend is used.
When C-union with enumerant discriminator, the size calculation of the discriminator value were erroneous. This lead to the side effect that only the first case of the union were allowed. The error were fixed by fixing the size calculation of the discriminator.
Own Id: OTP-3215
A bug is fixed when C backend is used.
When unions with enumerant discriminator were decoded, an error encountered in the union size calculation.
Own Id: OTP-3209
A bug is fixed when NOC backend is used.
When several functions with the same name were found in the included file tree, a compile time failure occurred.
Own Id: OTP-3203
Noc backend optimization
When NOC backend is choosen, the type code information on the stub functions is reduced to a single atom "no_tk". This is the default behavior. The typecode generation is enabled by the "use_tk" switch.
Own Id: OTP-3196
General java backend bug fixes
Protocol errors on user defined structures and union types are corrected.
Semantic test enhancements.
The compiler detects now semantic errors when enumerant values collide with user defined types on the same name scope.
Own Id: OTP-3157
General java backend bug-fixes
Several bugs were fixed on user defined types.
Union discriminators work better when all possible case values are defined.
A bug on Interface inherited operations is fixed that cause errors on generated server switch.
Type definitions on included files are better generated.
Own Id: OTP-3156
A new back-end which generates Java code according to the CORBA IDL to Java mapping for communication with the Erlang distribution protocol has been added to IC. For the moment there is no support for the Erlang types Pid, Ref, Port and Term but this will be added later.
Own Id: OTP-2779
Fixed the bug that the c code backends sometimes generated incorrect code for struct arguments. They shall always be pointers.
Own Id: OTP-2732
The code generation is fixed so the array parameters now follow the CORBA V2.0 C mapping.
Own Id: OTP-2873
Fixed the problem that the checking of the numbers of out-parameters always was true.
Own Id: OTP-2944
Fixed the bug that some temporary variables was not declared when c code.
Own Id: OTP-2950
Unions are now supported to agree with OMG's C mapping.
Own Id: OTP-2868
There is now a possibility to use pre- and postcondition methods on the server side for IC generated Corba Objects. The compiler option is documented in the ic reference manual and an example of how the pre- and postcondition methods should be designed and used is added to ic example directory (an ReadMe.txt file exists with some instructions for running the example code).
Own Id: OTP-3068
The compiler ignores unknown/non supported pragma directives. A warning is raised while the generated code will then be the same as if the corresponding (unknown) pragma directive were missing.
Own Id: OTP-3052
Wrong C code was generated for limited strings when they where included from another IDL specification.
Own Id: OTP-3033
The buffers for in/output used by C-stubs are now expandable. This fixes buffer overflow problems when messages received/sent do not fit in buffers.
Own Id: OTP-3001
The CORBA_Environment structure has now two new fields, the buffers for in/output must now be dynamically allocated.
The generated IFR registration function for constants has been fixed so the parameters are correct.
Own Id: OTP-2856
Error in the C code generation of ONEWAY operations without parameters The bug was an decoding error in the operation header. The generated code expected one parameter instead of zero. This is now fixed.
Own Id: OTP-2909
Type problems on floats and booleans fixed.
Erroneous code for runtime checks on float was removed and the internal format of the data representing the boolean value is upgraded.
Own Id: OTP-2925
The generated code for arrays of typedefined strings were erroneous in the C-backends due to a failure in the compiler internal type checking.
Own Id: OTP-2936
The generated code for typedefined nested sequences were erroneous in the C-backends. Pointer mismatches caused compilation failure.
Own Id: OTP-2937
The IDL specifications must be regenerated for C due to changes in the code generation.
One must regenerate IDL specifications for Erlang CORBA if there are constants in the specification due to previous errors in the IFR registration functions (OTP-2856).
Improvements on error report on unsupported types by
propagating warning when declaring unions in C -backends
A bug is fixed when arrays that contained variable size data on C-backends
The compiler generated erroneous code when IDL defined arrays that contained variable size data such as strings, variable size structs or sequences.
Own Id: OTP-2900
A bug is fixed when sequences that contained variable size data on C_backends
The compiler generated erroneous code when IDL defined arrays that contained variable size data such as strings, variable size structs or other sequences.
Own Id: OTP-2901
A bug concerning bounded strings on C-backends is fixed.
The compiler generated erroneous code for IDL defined bounded strings. Syntax errors were generated in special cases of typdedefined strings.
Own Id: OTP-2898
A runtime error when sequences that contained integer types is fixed.
When C-clients/server that communicated with Erlang clients/servers, and the data send by Erlang part were a list of small numbers, the Erlang runtime compacts the list to a string. This caused a runtime error when sending sequences of integer types and all had value less than 256.
Own Id: OTP-2899
An OMG IDL - C mapping problem on enumerant values is fixed.
The enumerant values names is now prefixed by the current scope, as defined in the specification.
Own Id: OTP-2902
A problem when using constants in array declarations is fixed.
Array dimensions declared with constants generated erroneous code.
Own Id: OTP-2864
Changes in C-generation on enumerant values.
A bug is fixed on the generated structures.
The generated C code for the structures corresponds now to direct mapping of C-structs.
Own Id: OTP-2843
Included structures inside a struct are no longer pointers.
Interface change for C-backends
Major interface change. The new interface is CORBA 2.0 compliant.
Own Id: OTP-2845
The C-backends functionality is improved
Due to interface change and some unneeded error checks,the C-generated code is fairly optimized.
Several serious bugs on decoding and memory allocation are fixed.
Interface change on the C-backends
In order to be CORBA 2.0 compatible, the new version generates fully incompatible C code.
A new backend is added : C-server
This back-ends can be used to create servers, compatible to c-clients, and Erlang genserver clients. The code produced is a collection of functions for encoding and decoding messages and a switch that coordinates them. These parts can be used to create other servers as well. All functions are exported to header files.
Own Id: OTP-2713
The C-client functionality is improved
The static buffer used for input/output is removed along
with the
The internal structure of the client is changed. The client functions are now a collection of encoding and decoding message functions ruled by a specific call function. While the basic client generated is a synchronous client, the exported functions support the implementation of threaded asynchronous clients.
The static buffer used for input/output is remove along
with the
The code generated is generally improved, warnings are (almost) eliminated, while no unidentified variable errors occur.
The IDL types unsigned shorts, shorts, floats are supported now.
All generated functions are exported in client header files..
Own Id: OTP-2712
A new option is added for the C-server back-end :
A new option is added :
A bug oneway operations on erl_corba and erl_genserv that caused en exit due to internal interface error is fixed.
A bug on oneway operations on c_genserv back-end that caused several variables to be unidentified is fixed.
Interface change on the C-client
The client functions are called with two extra variables, a pointer to an array of char - used for storage and an integer - the array size
The IDL type
The compiler now provides more in depth information (printouts) when errors occur.
In some cases the compiler stops compiling due to an abnormal exit or incompatible input. In this situation, a "fatal error" may occur but the compiler will generate information explaining the problem.
Own Id: OTP-2565
The IDL compiler is now a separate application and is longer a part of Orber.
Pragma handling implementation.
Pragma ID, prefix
and version are implemented to agree with CORBA revision
2.0. The compiler accepts and applies these on the
behavior of the compiled code.
In this implementation,
pragmas are accepted by the parser and applied by the use
of ic_pragma functions.
All IFR-identity handling now
passes through pragma table. As pragma handling in OMG-IDL
is affecting the identity of an ifr-object, all identity
handling and registration is now controlled by pragma
functions. A hash table called "pragmatab" contains vital
identity information used under compilation.
There two major pragma categories :
Normal pragmas, are used in the code where basic definitions and statements appear.
Under certain circumstances, ugly pragmas can now
appear inside code, parameter lists, structure
definitions ... etc.
It is quite challenging to
allow ugly pragmas, but the effects of unlimited ugly
pragma implementation on the parser can be enormous.
Ugly pragmas can cause the parser source code to
become time consuming and user unreadable.
In order
to allow ugly pragmas but not destroy the current
structure of the parser, the use of ugly pragmas is
limited. Multiple pragma directives are allowed
inside parameter lists, unions, exceptions,
enumerated type, structures... as long as they are do not
appear between two keywords or between keywords and
identifiers.
The pragma effect is the same for both scope and basic pragma rules.
When compiling, an IFR-identity must be looked up several times but by storing identity aliases inside the pragma table there this an increase in both speed and flexibility.
Own Id: OTP-2128
Code for interface inheritance registration for the IFR registration code .
Inherited interfaces can now be registered as a list of interface descriptions by entering code for inherited interface registration under new interface creation. This is achieved by correcting the function reg2/6 and adding two more functions, get_base_interfaces/2 and call_fun_str/2
Own Id:
OTP-2134
IFR registration checks for included IDL files.
All top level definitions (with respect to the scope) - modules, interfaces, constants, types or exceptions - found in an IDL file are either defined inside the compiled IDL file or inside included files. By having an extended registration of all top level definitions it becomes possible to simply produce checks for those included by the current IDL file. A function call include_reg_test/1 is added in all OE_* files that checks for IFR-registration on all included IDL files. The code for that function is added inside the OE_* file, while the function is called under OE_*:OE_register/0 operation.
Own Id: OTP-2138
Exception registration under IFR-operation creation.
By entering code for exception registration under operation creation, the exceptions of an operation can be checked now. This is done by correcting the function get_exceptions/4 and adding two more functions, excdef/5 and get_EXC_ID/5 ( the last two are cooperating with the first one and all three are defined in the module "ictk" ).
Own Id: OTP-2102
New back-end to IDL compiler : Plain Erlang.
The new back-end just translates IDL specifications to Erlang module calls. No pragmas are allowed.
Own Id: OTP-2471
New back-end to IDL compiler : generic server.
A new back-end that translates IDL specifications to a standard OTP generic server.
Own Id: OTP-2482
New back-end to IDL compiler : c client generation
A new back-end that translates IDL specifications to a C API for accessing servers in Erlang.
Own Id: OTP-1511
All records in generated files reveal own Erlang modules.
In Erlang related back-ends, every structure
which generates definition form is a record,
(such as union, struct, exception.... ). These records are
held in a generated Erlang files which
contain functions that reveal record information.
The Erlang file which contain these functions is
named after the scope of the record (similar
to the generated module and interface files).
Three functions are available :
tc/0 - returns the record type code,
id/0 - returns the record id,
name - returns the record name.
Own Id: OTP-2473
Changes in compiler usage and code generation.
New compilation flags. New flag be ( = back-end ) which is used by the compiler to choose back-end. Default back-end is set to erl_corba.
Stub files have an extra function oe_dependency/0 indicating file dependency. This helps the user to determine which IDL files should to be compiled beside the compiled file.
Own Id: OTP-2474
The IDL generation for CORBA is changed so standard gen_server return values can be used from the implementation module. The change is compatible so that old values remain valid.
Own Id: OTP-2485
It's now possible to generate an API to a CORBA object that accepts timeout values in the calls in the same manner as gen_server. The option to the compiler is "timeout".
Own Id: OTP-2487
Empty file generation problem is fixed. When the IDL module definition did not contain constant definitions, the generated stub file for that module definition was empty. After checking the module body, these files will not be generated anymore.
Changes in generated files.
Stub-files generated by the compiler had prefix "OE_" and those used by Orber had also a register/unregister function called "OE_register"/"OE_unregister" and a directive "OE_get_interface" passed to the gen_server. This made it difficult/irritating to use, for example call to the register function in Orber would appear as shown below:
'OE_filename':'OE_register'().
This is changed by using the prefix "oe_" instead for "OE_" for the above. A registration call in Orber is now written:
oe_filename:oe_register().
Own Id: OTP-2440