Skip to content

(Beta) 0.2

Compare
Choose a tag to compare
@skippuku skippuku released this 02 Aug 00:50
· 65 commits to master since this release

From doc/changelog.txt:

API SIMPLIFICATION
	- IntroType changes:
		type->i_struct->count_members => type->count
		type->i_struct->members       => type->members

		type->i_enum->count_members   => type->count
		type->i_enum->members         => type->values
		type->i_enum->is_flags        => type->flags & INTRO_IS_FLAGS
		type->i_enum->is_sequential   => type->flags & INTRO_IS_SEQUENTIAL

		type->array_size              => type->count

		intro_size(type)              => type->size
		<unavailable>                 => type->align

		if (type->of)                 => if (intro_has_of(type))
		('of' now shares storage with other fields)

	- IntroFunction changes:
		func->type->args->count       => func.count_args
		func->type->args->types       => func.arg_types
		func->type->of                => func.return_type

	- Removed IntroStruct, IntroEnum, and IntroTypePtrList
	- Removed all usage of flexible array members in introlib

	- New IntroContainer system provides a simple API for recursively working
	on data while retaining context for how the data was accessed.

CITY IMPROVEMENTS
	- support for unions (using the "when" attribute)
	- much better handling of pointers
	- city file data can now be discarded after load
	- reduction in serialized data size

ATTRIBUTES
        - Support for struct values including C99 style initialization
 
	- New "expr" attribute type generates bytecode for expressions
	that can access struct/union members.

	- The "length" attriubte is now an expression. This is useful if the size
	of data is dependent on multiple variables, for example 
	"I(length map_width * map_height)" could be used to define the size of
	a tilemap buffer.

	- New builtin attribute "when" for using an expression to dynamically
	determine when a struct/union member is valid.

	- The "string" attribute type has been removed. Use "value(char *)" instead.

NEW PARSER FEATURES
	- '#prama intro' can be used to control what parts of a file should have
	information generated
		- push, pop
		- enable [x], disable [x] where x is either omitted or one of the
		following: functions, macros, all, includes, system

	- Macro information generation (use pragma "enable macros")

	- Vim syntax generation with --gen-vim-syntax

	- Performance metrics report with option '-V'

IMPLEMENTATION CHANGES
	- Struct member offsets are now known at parse time.
		- Enables more features in the parser.
		- NOTE: pack(x), __attribute__((aligned(x))), etc. are not yet implemented
	- Generated headers are much more concise (no more offsetof's)

	- Files are now tokenized all at once. Previously, the preprocessor and
	parser would tokenize as needed. This simplifies the preprocessor and
	parser.

OTHER
	- intro_print() improvements

	- Miscellaneous fixes and improvements