Compiler: Add format attribute to yywarning() and my_yyerror().
Compiler [Typechecker]: Fix leaking marker assignments with T_OR
Compiler [Typechecker]: Fix disappearing attribute on A with A-(B|C)
low_type_to_string: Add u8 rather than char to buffer This fixes a warning when char is signed.
Build: Fix warnings about unused arguments and functions.
low_describe_{type,_int_range}: Fix format strings
Compiler [Typechecker]: Fix formatting of some type mismatch errors. yytype_report()'s format string is used both with the Pike-level sprintf() and with string_builder_vsprintf(). Adjust some formats accordingly. Fixes testsuite failure.
Build: Use p-prefix for Pike sprintf-extensions to sprintf(). Fixes lots of warnings from gcc.
Compiler [Typechecker]: Fix missing adjustment to remapper API change In push_and_fixup_markers().
Compiler [Typechecker]: Fix NULL-deref on __unknown__. Fixes testsuite failure.
Compiler: Reduce code-duplication. Move cyclic type detection code from simple_describe_type() to low_describe_type(). Remove the simple_describe_type() implementation of rendering types. simple_describe_type() now just calls safe_pike_fprintf(stderr, "%T") with its argument (which in turn calls low_describe_type()). Fix issue where the NULL type was sometimes rendered as `mixed` rather than the expected `__unknown__`.
Work in progress: Sakura master
foo|void... is foo...
Compiler [Typechecker]: Evaluate markers in marker value assignments.
Compiler [Typechecker]: Add missing special case.
Compiler [Typechecker]: Improved matching of transitive functions.
Compiler [Typechecker]: Pass along remap to expand_transitive_remap(). Fixes some marker expansion issues.
Compiler [Typechecker]: Fixed marker issues in expand_transitive_remap(). No remapping should be done on cont when propagating it "in front of" the transitive type. The return value from cont must have its markers expanded before using it as argument to trans. These changes should make the remap argument to expand_transitive_remap() actually useful (all current users pass a NULL remap).
Compiler [Typechecker]: Move TRANSITIVE special cases to push_type(). PIKE_T_TRANSITIVE types will now have neither a car nor a cdr of NULL. Reduces need for special cases in other code.
Compiler [Typechecker]: Add exception to inexact mode.
Compiler [Typechecker]: Improved MINUS of scoped types. Fixes argument matching when the value has a scoped type. Fixes map(a, lower_case) some more.
Compiler [Typechecker]: Improved support for markers in function types. Improved handling of eg array(string) a = ({}); typeof(map(a, lower_case)); Giving the comparison scope(0, function(int:int)|function(string:string)) - function(string, @($1 = function(__unknown__...:mixed))) where previously the marker $1 was not set properly.
Compiler [Typechecker]: Add PT_FLAG_REMAP_NO_STORE_MARKERS. This flag inhibits altering the values for the marker set.
Compiler [Typechecker]: Adjust evaluation order in type_binop(). Fixes erroneous warning for __deprecated__(int(..-1)) - void|int(31bit)|__deprecated__(int(..-1)) Triggered when comparing typeof(__builtin.Nettle.Hash()->hash) with typeof(Nettle.Hash()->hash). Fixes testsuite failure.
Compiler [Typechecker]: Reduce recursion in lower_new_check_call().
Runtime: Changed a few errors into fatals. Some of these could be triggered via the compiler, which does not like errors being thrown.
Compiler [Typechecker]: Improved AND of scoped types. Fixes testsuite failure.
Compiler [Typechecker]: Fix infinite recursion. Comparing two transitive types could cause infinite recursion. Fixes #10097.
Compiler [Typechecker]: Improved handling of eg string - string(17:7bit).
Compiler [Typechecker]: Improved performance for binop on scope types. Alleviates some of the issues in #10096.
Compiler [Typechecker]: Allow indexing of type(object) with strings.
Compiler [Typechecker]: Added PIKE_T_THRESHOLD. This is a threshold function that coerces its argument to mixed|void if the argument is not __unknown__. It can be used to convert other type operators from set-operations to boolean operations.
Compiler [Typechecker]: Survive mixed|void in pop_type_stack().
Compiler [Typechecker]: Fix common consequential error. Triggering a compilation error caused return statements for later functions declared as returning void in the same program to fail with: Must return a value for a non-void function. Expected: mixed. Got : void.
Compiler [Typechecker]: Inhibit erroneous warning. Inhibits erroneous warning in strict_types mode when eg calling predef::object_program() with a mixed value. Fixes multiple testsuite failures.
Compiler [Typechecker]: Support object_program(obj)() again. Fixes multiple testsuite failures.
Compiler [Typechecker]: Fix issue comparing function types. Promote void to zero when comparing return types. The following code is thus now allowed without complaint: void foo(string, int|void); function(string:int(0..)) f = foo; Fixes compilation error in Tool.Hilfe.
Compiler [Typechecker]: Improved robustness in simple_describe_type().
Compiler [Typechecker]: Allow indexing of types with strings.
Compiler [Typechecker]: Fix T_OBJECT - T_PROGRAM.
Compiler [Typechecker]: Use low_discard_type() where appropriate.
Merge branch 'patches/bug10054' * patches/bug10054: Compiler [Typechecker]: compiler_discard_type() now leaves a marker.
Compiler [Typechecker]: Fix or of string types. Fixes type for or with string(zero). Fixes testsuite failure.
Compiler [Typechecker]: Fix NULL-deref.
Compiler [Typechecker]: Add PIKE_T_INT_OP_{MIN,MAX}. NB: Also renumbers PIKE_T_INT_OP_MUL.
Compiler [Typechecker]: Add bool_type_string.
Revert "ADT.Interval.Boundary: Add prototype for lfun::`~()." Some extra juck got in. This reverts commit 46d303594c1ddf3382e909c4d44cd112a3502735.
ADT.Interval.Boundary: Add prototype for lfun::`~(). Fixes compilation errors.
Compiler [Typechecker]: Added PIKE_T_INT_OP_MUL.
Compiler [Typechecker]: Improved type for bignum objects in _typeof(). Bignum objects now get the type scope(0, object(bignum)|int). This helps in avoiding issues when the bignums aren't inspected deeply. This fixes eg return ([ "a": 0xffffffff00000000ffffffff ]); Which previously caused a compilation error due to the compiler derived type (mapping(string(1:97): int)) not matching the type from _typeof() on the constant value (mapping(string: object)). The compiler now instead derives the type mapping(string(1:97): scope(0, int|object(is bignum))) which is compatible with the result from _typeof(). Fixes testsuite failures on 32-bit platforms.
Compiler [Typechecker]: Retain remap state when A - (B|C). Fixes lost state mapping for push_type_attribute().
Compiler [Typechecker]: Added state mapping to struct remap_state.
Compiler [Typechecker]: Adjusted API for handling attributes.
Compiler [Typechecker]: Use fun_name from call_state.
Compiler [Typechecker]: Add function name field to call_state.
Compiler [Typechecker]: Added unknown_function_string.
Compiler [Typechecker]: Added PT_FLAG_CMP_FUN_ARG. This flag is intended to be used when handling attributes on types that expand to sequences, do that the handler can differentiate between matches like array(__attribute__("foo", mixed)) and function(__attribute__("foo", mixed)...: mixed) in the latter case PT_FLAG_CMP_FUN_ARG will be set, so that the handler can expand the attribute one argument at a time, and in the former case it will not be set, so that the types can be joined into a single type.
Compiler [Typechecker]: Send call_state to new_get_return_type().
Compiler [Typechecker]: Fix broken check for T_MANY. avoidable and bvoidable now contain other flags than just PT_FLAG_CMP_VOIDABLE, so check just for the needed flag.
Compiler [Typechecker]: Improved checking of variant overloading. The variant overload check now attempts to match the variant dispatcher better.
Compiler [Typechecker]: Fix typo.
Compiler [Typechecker]: Some adjustments of indexing of empty containers. Indexing the empty array now gives an error again. Indexing the empty mapping is now allowed again.
Compiler [Typechecker]: Added operator PIKE_T_APPLY.
Compiler [Typechecker]: Fix detection of too many args to sscanf().
Compiler [Typechecker]: Fix detection of empty strings. Update index_type() to know the difference between string(zero) and string(zero: __unknown__). Only the latter is an empty string.
Compiler [Typechecker]: Add PIKE_T_INT_OP_RANGE.
Compiler [Typechecker]: Support casting to attributed types. Also: Avoid complaining about assigning deprecated values to deprecated variables.
Compiler [Typechecker]: Some more __deprecated__ fixes.
Compiler [Typechecker]: __deprecated__ should now work again.
Compiler [Typechecker]: Fix get_type_of_svalue() for containers containing functions.
Compiler [Typechecker]: More low-level operations for T_AND.
Compiler [Typechecker]: Perform some basic operations in low-level code.
Compiler [Typechecker]: Drop type attributes after modifying their contents.
Compiler [Typechecker]: Fix C-stack overflow.
Compiler: Adjusted type for enums.
Compiler [Typechecker]: Added PIKE_T_INT_OP_{AND,XOR}. Thanks to Marcus Comstedt for the low-level code.
Compiler [Typechecker]: Add special case. Special case for function(__unknown__...:mixed|void). Fixes testsuite failure.
Compiler: Even more sscanf_80_type_string fixes.
Compiler: Add missing definition.
EFUNs: Use the sscanf_input attribute in sscanf() and array_sscanf(). Fixes quite a few warnings.
Compiler [Typechecker]: Call apply_attribute_constant() also when no constant. Also adjusts the third argument to apply_attribute_constant() to be the subset of the argument type that matched the declared type. Fixes handling of the sscanf_input attribute.
Compiler [Typechecker]: Fix expected type for sscanf lvalues.
Compiler [Typechecker]: Support strict checking of sscanf().
Compiler [Typechecker]: Code cleanup. Also fixes a compilation error.
Compiler [Typechecker]: Changed API for apply_type_attribute() et al. They now get a mapping that they may use to keep state between arguments.
Compiler [Typechecker]: Add struct call_state. This struct is intended to contain state that is to be propagated between arguments during typechecking of function calls.
Compiler [Typechecker]: Avoid combinatorial explosion.
Compiler [Typechecker]: Fix warning
Compiler [Typechecker]: void is converted to zero when in container type. Fixes multiple warnings.
Compiler [Typechecker]: No more implicit nullable for function args. Fixes multiple warnings from eg check_variant_overload().
Compiler [Typechecker]: Fixed bug in handling of PT_FLAG_CMP_IGNORE_EXTRA_ARGS.
Compiler [Typechecker]: Improved handling of mixed when CMP_NULLABLE.
Compiler [Typechecker]: Fix checking of functions returning void.
Compiler [Typechecker]: Improved checking of calls of inverted functions. Calling eg ~function(~int...:mixed) (ie "exists int") with mixed now results in the same as calling it with int. Fixes several testsuite failures in eg the Calendar module.
Compiler [Typechecker]: Add special case for T_TRANSITIVE - T_MANY. Special case for subtracting function(:X) from a transitive type.
Compiler [Typechecker]: Improved handling of T_TRANSITIVE - T_MANY.
Compiler [Typechecker]: Improved detection of strict mismatches. Fixes erroneous result type from eg map("foobar"/2, reverse).
Compiler [Typechecker]: Fix erroneous strict types warning. Calling a function that expects a function argument with a function of type scope(function(A...:X)|function(B...:Y)) is OK if either of function(A...:X) or function(B...:Y) is OK.
Compiler [Typechecker]: Do not accept more arguments than declared.
Compiler [Typechecker]: Fix some special cases with T_VOID in type_binop(). Also adds some previously missing handling of markers.
Compiler [Typechecker]: Fixed reference handling in store_marker() In cases where the value passed to store_marker() was NULL but the marker was present in the mapping, we used to overwrite the marker with itself. By doing so, assign_svalue() (as used by low_mapping_insert()) would free the same value we were inserting. This is never great but has especially noticeable consequences when the value only had a single reference. Instead, we now simply do not re-insert the value in these cases.
Compiler [Typechecker]: Support an alternate set of remappings. Also makes simple_describe_remap_state() available without PIKE_DEBUG.
Compiler [Typechecker]: Support multiple store in store_marker().
Compiler [Typechecker]: Added helper simple_describe_remap_state().
Compiler [Typechecker]: More tracing.
Compiler [Typechecker]: Fixed another NULL-deref.
Compiler [Typechecker]: Fix some NULL-derefs.
Compiler [Typechecker]: Enable the cyclic check.
Compiler [Typechecker]: Trace binops at debug level 3+.
Compiler [Typechecker]: Survive cyclical types.
Compiler [Typechecker]: Ignore the return value for functions returning void.
Compiler [Typechecker]: Fix subtraction of void.
Compiler [Typechecker]: Only output type flags at high debug levels.
Compiler [Typechecker]: Fix soft casting to program.
Compiler: Avoid recursing in push_remap_markers after looking up markers
Compiler [Typechecker]: Upgrade __unknown__ return value to mixed. Fixes erroneous errors when calling the generic function type (ie function(mixed...:__unknown__)).
Compiler [Type-checker]: Break some cases of infinite recursion.
Compiler [Typechecker]: Use the marker remapper in lower_new_check_call().
Compiler [Typechecker]: Improved handling of markers for PIKE_T_TRANSITIVE.
Compiler [Typechecker]: Removed inline for debug_mk_type().
Runtime: Improved robustness for describe_type() et al.
Runtime: '~' now represents the T_NOT operator when rendering types.
Documentation: Improved doc of check_variant_overload().
Compiler [Typechecker]: Fix check_variant_overload().
Compiler [Typechecker]: Fix checking of overloading of variants.
Compiler [Typechecker]: Added some special cases. Special cases for matching against function(__unknown__...:mixed).
Compiler [Typechecker]: Remove some dead code. Removes low_and_pike_types() et al as they are no longer used. Fixes compile-time warning about unused static function.
Compiler [Typechecker]: Use type_binop() to implement and_pike_types().
Runtime: Fix leak of type stack marks when dispatching variants. Some obscure variant functions caused the variant dispatcher to leak marks on the type stack.
Compiler [Typechecker]: Add and use {push_,}expand_transitive_remap(). Fixes some NULL-dereferences on NULL markers.
Compiler [Typechecker]: Improved BINOP_MINUS for functions.
Compiler [Typechecker]: Fix infinite loop.
Compiler [Typechecker]: Some remapper API changes. The remap_state now contains one mapping for each of the binop parameters. This is to make it simple to save and restore the state for the binop parameters separately. lookup_marker() now supports markers set to __unknown__.
Compiler [Typechecker]: Improved handling of markers and PT_BINOP_MINUS.
Compiler [Typechecker]: Added PT_FLAG_REMAP_KEEP_MARKERS.
Compiler [Typechecker]: Improved handling of __unknown__. multiset(__unknown__) & multiset(mixed) ==> multiset(__unknown) multiset(__unknown__) - multiset(mixed) ==> __unknown__
Compiler [Typechecker]: Support PIKE_T_OPERATOR in transitive types.
Compiler [Typechecker]: Added short-hand for PIKE_T_TRANSITIVE. transitive(__unknown__, A) is now equivalent to transitive(A, A).
Compiler [Typechecker]: Improve handling of PIKE_T_TRANSITIVE some more.
Compiler [Typechecker]: Improved handling of PIKE_T_TRANSITIVE. Reduces recursion on TRANSITIVE PT_BINOP_AND MANY.
Compiler [Typechecker]: Fix lots of erroneous warnings.
Compiler [Typechecker]: Fix another typo.
Compiler [Typechecker]: Fix multiple NULL-dereferences.
Compiler [Typechecker]: Improved handling of PIKE_T_OPERATOR.
Comment out currently unused push_reverse_binop
Compiler [Typechecker]: Improved handling of mixed in int_op's.
Compiler [Typechecker]: Fix lost array nesting. The array nesting was lost when calling transitive functions nested in arrays.
Compiler [Typechecker]: Fix marker loss in new_check_call().
Compiler [Typechecker]: Remove some dead code.
Compiler [Typechecker]: Fix compile-time type for negative constants.
Compiler [Typechecker]: Support marker expansion in cdr of PIKE_T_OPERATOR.
Compiler [Typechecker]: Remove some broken DWIM in push_type_operator(). Fixes issues with PIKE_T_OPERATOR and PIKE_T_UNKNOWN.
Compiler [Typechecker]: More type operator fixes.
Compiler [Typechecker]: Add PIKE_T_INT_OP_SUB. This is a type operator that returns the type for the result of subtracting two integer ranges.
Compiler [Typechecker]: Consider declared array range in check_splice_call(). This makes it possible to avoid warnings about array max length restrictions when using the @-operator when using strict types.
Compiler [Typechecker]: Fix handling of mixed in get_int_type_range(). Also adds some related doc.
Compiler [Typechecker]: Fix result from match_types() and T_NOT.
Revert "Compiler [Typechecker]: Promote type operator failure to void." This commit broke the type checking of foreach() in Getopt. This reverts commit 4ebedfbedd5113292b43577f1bad339bbbae1f28.
Compiler [Typechecker]: Promote type operator failure to void. Fixes some obscure failures.
Compiler [Typechecker]: Improved low_get_return_type().
Compiler [Typechecker]: Implement old check_call() API using new API. low_get_return_type() is now implemented with low_new_check_call() and new_get_return_type(). This should make the type checker more consistent. Also adds some documentation.
Compiler [Typechecker]: Fix yet another NULL-deref.
Compiler [Typechecker]: Fix some more NULL-derefs.
Compiler [Typechecker]: Improved behavior for {index,key}_type(). They no longer upgrade __unknown__ results to mixed. key_type() now handles __unknown__, T_AND and T_NOT properly. key_type() now returns the declared index type for T_ARRAY and T_STRING. Added some documentation.
Compiler [Typechecker]: Changed type for F_PUSH_ARRAY nodes. This is in preparation of having check_splice_call() account for any array length restrictions.
Compiler [Typechecker]: Do not generate the type zero = zero.
Compiler [Typechecker]: Fix NULL-dereference.
Compiler [Typechecker]: Relax argument checking for zero. Improves type derivation for function calls where the arguments have types like string|zero or object|zero.
Compiler [Typechecker]: Clean up describing of some types.
Compiler [Typechecker]: Fix matching against mixed.
Compiler [Typechecker]: Added PT_FLAG_{NULLABLE,MIXED}.
Compiler [Typechecker]: Fix PT_FLAG_MIXED with T_NOT nodes.
Compiler [Typechecker]: Improved handling of common case in <=.
Compiler [Typechecker]: Fix calling of negated types. Calling of not(zero) now returns mixed.
Compiler [Typechecker]: Fix indexing of strings and arrays with mixed.
Compiler [Typechecker]: mixed is a superset of all types except void. Types like array(int|mixed) should now become array(mixed). Also removes promotion of __unknown__ to void in an obscure case.
Compiler [Typechecker]: Clean up handling of PT_FLAG_VOIDABLE.
Compiler [Typechecker]: Fix PT_FLAG_VOIDABLE for T_NOT nodes.
Compiler [Typechecker]: Add type flag PT_FLAG_VOIDABLE.
Compiler [Typechecker]: Stricter check of array contents in soft casts.
Compiler [Typechecker]: Fix A - (B|C) in INEXACT mode.
Compiler [Typechecker]: Fix typo in type_binop().
Compiler [Typechecker]: Improved handling of NOT in type_binop(). Fixes the case mixed - (mixed|zero) aka (!zero) - mixed which used to result in !(mixed|zero) rather than the expected __unknown__ Fixes several warnings.
Compiler [Typechecker]: Improved handling of markers in type_binop().
Compiler [Typechecker]: Fix mapping leak in type_binop().
Compiler [Typechecker]: Fix indexing of arrays with strings. Due to the string length being part of the string type, the old method started failing for strings with known lengths. Fixes multiple warnings.
Compiler [Typechecker]: Add PT_FLAG_REMAP_INEXACT. This flag causes type_binop() to cheat a bit, and is useful if its result is only going to be used to compare against NULL. This speeds up pike_types_le() quite a bit for some cases.
Compiler [Typechecker]: Added PT_FLAG_CMP_IGNORE_EXTRA_ARGS. This is a flag for type_binop() that does the reverse of what LE_STRICT_FUN does for low_pike_types_le().
Compiler [Typechecker]: Disable INSEPARABLE special case in type_binop().
Compiler [Typechecker]: Make pop_type_stack() array index type aware.
Compiler [Typechecker]: Improved support for markers in type_binop().
Compiler [Typechecker]: Back-patch marker assignments in type_binop().
Compiler [Typechecker]: Updated internal doc.
Compiler [Typechecker]: Support __unknown__ in {lookup,store}_marker(). Also: lookup_marker() now adds a reference to the returned type.
Compiler [Typechecker]: More marker propagation handling for T_OR.
Compiler [Typechecker]: Handle marker propagation for T_OR.
Compiler [Typechecker]: Minor code clean up. Reduce number of special cases somewhat.
Compiler [Typechecker]: Move markers mapping to remap_state. Cleans up the API somewhat, and enables allocating the mapping on demand.
Compiler [Typechecker]: Improved handling of markers in type_binop(). Also removes some debug.
Compiler [Typechecker]: Support nested T_OR in get_int_type_range().
Compiler [Typechecker]: Added some FIXMEs regarding range_type().
Compiler [Typechecker]: Improved handling of PT_BINOP_MINUS.
Compiler [Typechecker]: new_get_return_type(__unknown__, X) == __unknown__. Fixes issues eg with type checking of foreach().
Compiler [Typechecker]: Remove the mixed fallback from apply_type_operator(). Upgrading types from __unknown__ to mixed was not a good idea. Fixes several warnings.
Compiler [Typechecker]: More find_lfun_type() fixes.
Compiler [Typechecker]: Fix some issues with find_lfun_type(). find_lfun_type() now returns NULL for object types known not to have the lfun. Fixes a string leak.
Compiler [Typechecker]: Disable excessive type warning.
Compiler [Typechecker]: Support nested type operators.
Compiler [Typechecker]: Add type operator get_return.
Compiler [Typechecker]: Filter type markers with their match pattern. Fixes type markers containing non-matching types.
Compiler [Typechecker]: Fix some issues with __unknown__.
Compiler [Typechecker]: Improved handling of index type for arrays.
Compiler [Typechecker]: Improved type for empty array.
Compiler [Typechecker]: Fix type stack underflow.
Compiler [Typechecker]: Improved handling of nullable types.
Compiler [Typechecker]: Added flag PT_FLAG_REMAP_INHIBIT.
Compiler [Typechecker]: Remove stupid_describe_type_string(). This was a remnant of the really old type checker, and has not been used for at least 10 years.
Compiler [Typechecker]: Render markers with the prefix '$'. This reduces ambiguity when markers and integers are mixed.
Compiler [Typechecker]: Empty string has unknown range The empty string now has no/unknown range and is a typewise valid match for all possible string ranges.
Compiler [Typechecker]: Markers now default to __unknown__.
Compiler [Typechecker]: Improved handling of __unknown__.
Compiler [Typechecker]: Fix handling of __unknown__ in string types.
Compiler [Typechecker]: Do not keep the type name when its value changes.
Compiler [Typechecker]: Improved diagnostics --with-dmalloc.
Compiler [Typechecker]: Fix type leak in type_binop().
Compiler [Typechecker]: Fix type leak in find_lfun_type().
Debug: Fix some rendering issues in simple_describe_type().
Compiler [Typechecker]: Workaround for gcc optimization of signed overflow The expression "(min1 > max2) && (min1 > max2 + 1)" got optimized into "(min1 > max2 + 1)" by gcc, because of min1 is larger than max2 + 1, then it clearly must be larger than max2 as well... Except when max2 + 1 is a signed overflow. So explicitly check for that instead and hope gcc doesn't optimize away that check as well...
Compiler [Typechecker]: Fix erroneous deprecation warning in obscure case. Fixes [REP-60].
Compiler [Typechecker]: Fixed ref-count errors with PIKE_T_OPERATOR.
Compiler [Typechecker]: Detect circularities in simple_describe_type().
Compiler [Typechecker]: Added type operators set_car and set_cdr. Also improves robustness regarding NULL in types.
Compiler [Typechecker]: Fix NULL-deref. Thanks to Chris Angelico <rosuav@gmail.com> for the report and test case. Fixes [LysLysKOM 24784470].
Compiler: Fix typo.
Compiler: Support nullable types in compile_type_to_runtime_type().
Compiler [Typechecker]: Improved handling of __unknown__ in `|().
Compiler [Typechecker]: Fix another issue with __unknown__.
Compiler [Typechecker]: Support __unknown__ in more places.
Compiler [Typechecker]: Do not lose track of markers.
Compiler [Typechecker]: Fix some issues with binop's on __unknown__. Fixes some erroneous warnings.
Compiler [Typechecker]: Move some diagnoistics to PIKE_EXTRA_DEBUG.
Compiler [Typechecker]: More use of PIKE_T_UNKNOWN.
Compiler [Typechecker]: Improved robustness of lower_new_check_call().
Compiler [Typechecker]: Improve robustness against NULL in free_type().
Compiler [Typechecker]: Third go at subtraction of function types.
Compiler [Typechecker]: Fix some NULL-derefs in low_index_type().
Compiler [Typechecker]: Fix NULL-deref in push_unlimited_array_type().
Compiler [Typechecker]: More __unknown__ fixes.
Compiler [Typechecker]: Fixed PT_FLAG_CMP_VOID_IS_ZERO.
Compiler [Typechecker]: Fix NULL-deref in even_lower_and_pike_types().
Compiler [Typechecker]: Improved binop(PT_BINOP_{OR|MINUS}, ...) Add special case to simplify the result for A - (B|C) and A | (B|C). Previously int - (int(1)|int(5)) resulted in (int(..0)|int(2..)) & (int(..4)|int(6..)) now it instead results in int(..0)|int(2..4)|int(6..) which is what most users expect.
Compiler [Typechecker]: Fix another NULL-deref in low_index_type().
Compiler [Typechecker]: Fix NULL-deref in low_index_type().
Compiler [Typechecker]: Fixed some more NULL-derefs when rendering types.
Compiler [Typechecker]: Fix NULL-deref in describe_type().
Compiler [Typechecker]: More use of __unknown__ in typeof().
Compiler [Typechecker]: Fix some NULL-derefs when rendering types.
Compiler [Typechecker]: Handle return of __unknown__ in match_types().
Compiler [Typechecker]: Fix NULL-deref in new_get_return_type().
Compiler [Typechecker]: Fixed NULL-deref in push_type_operator().
Compiler [Typechecker]: Added some special cases to push_type(). Handle __unknown__ in combination with AND, OR and NOT directly.
Compiler [Typechecker]: Use __unknown__ instead of zero in some cases.
Compiler [Typechecker]: Added flags to pike_types_le().
Compiler [Typechecker]: Added PT_FLAG_CMP_VOID_IS_ZERO.
Compiler [Typechecker]: Added PT_FLAG_CMP_INSEPARABLE.
Compiler [Typechecker]: Added some internal doc.
Compiler [Typechecker]: More NULL-deref fixes.
Compiler [Typechecker]: Fix some GC NULL-derefs.
Compiler [Typechecker]: Improved handling of NULL in pike_types_le().
Compiler [Typechecker]: Minor DMALLOC clean-up.
Compiler [Typechecker]: Fix indexing of __unknown__.
Compiler [Typechecker]: Fix memory leak.
Runtime [DEBUG]: Improved robustness.
Runtime: One more place for __unknown__.
Runtime: Fix rendering of __unknown__.
Build: Fix some warnings.
Compiler [Typechecker]: Improved --with-dmalloc handling.
Compiler [Typechecker]: Survive NULL in push_finished_type_with_markers().
Compiler [Typechecker]: Improved handling of NULL in or_pike_types().
Compiler [Typechecker]: Fix result type for indexing of mappings. Indexing of mappings may always return zero (or rather UNDEFINED). Fixes compilation error from the optimizer when it optimizes a mapping lookup to UNDEFINED, but zero is not in the value type.
Compiler [Typechecker]: Fix soft casting of void. Soft casting of eg string|void to string now gives the expected string (rather than string|zero). Fixes multiple strict types warnings.
Compiler [Typechecker]: Fix handling of nullable-void with mixed.
Runtime: Fix rendering issue of array types.
Compiler [Typechecker] [GC]: Fix NULL-deref.
Compiler [Typechecker]: Improved robustness against NULL.
Compiler [Typechecker]: Fix handling of NULL in debug_free_type(). debug_free_type() attempted to dereference NULL when it looped on certain types.
Compiler [Typechecker]: Fix zero - void and void - zero.
Compiler [Typechecker]: Use type_binop(PT_BINOP_MINUS) for pike_types_le().
Compiler [Typechecker]: push_binop(PT_BINOP_NONE) is now supported.
Compiler [Typechecker]: More robustness against NULL types.
Compiler [Typechecker]: Support NULL as argument type in T_MANY.
Compiler [Typechecker]: Support push_type(PIKE_T_UNKNOWN). This pushes a NULL on the type stack, and is intended to represent the empty type.
Build: Fix compilation warning.
Compiler [Typechecker]: Fixed typo.
Compiler [Typechecker]: Fix binops where one or both operands is NULL.
Compiler [Typechecker]: Restructure binary operations of function types. Also fixes the result of PT_BINOP_AND on function types.
Compiler [Typechecker]: Improved handling of comparing void and zero. Fixed some handling of T_MANY(T_VOID, ...) in combination with T_MANY(T_ZERO, ...).
Compiler [Typechecker]: Fix comparison of void with mixed.
Compiler [Typechecker]: Use type_binop() in soft_cast().
Compiler [Typechecker]: Added type_binop().
Compiler [Typechecker]: Some tuning of handling of zero and mixed.
Compiler [Typechecker]: Unify binops for T_AND and T_OR. Also fixes typo in lookup table.
Compiler [Typechecker]: Improved handling of OR in low_type_binop().
Compiler [Typechecker]: Improve tracing of low_type_binop().
Compiler [Typechecker]: Fixed more issues with subtraction of functions. Function type subtraction now seems to be compatible with pike_types_le().
Compiler [Typechecker]: Remove extraneous pop_stack_mark().
Compiler [Typechecker]: Support PT_BINOP_XOR and PT_BINOP_XNOR.
Compiler [Typechecker]: Remove use of duplicate type stack marks. Use peek_stack_mark() instead of an extra type_stack_mark() followed by pop_stack_mark(). Reduces type mark stack use and code size slightly.
Compiler [Typechecker]: Even more fixes for PT_BINOP_MINUS and functions.
Compiler [Typechecker]: Improved handling of PT_BINOP_MINUS & functions.
Compiler [Typechecker]: Added some comments.
Compiler [Typechecker]: Use the NULLABLE flag in a few common cases.
Compiler [Typechecker]: Added PT_FLAG_REMAP_NULLABLE. This flag is analogous to void and PF_FLAG_REMAP_VOIDABLE, but for zero.
Compiler [Typechecker]: Remove some obsolete code. Missed this hunk in the previous commit.
Compiler [Typechecker]: Fix handling of T_ZERO in low_type_binop(). Eg zero - int(1bit) now returns Ø (empty set) as intended (and not zero).
Compiler [Typechecker]: Clean up flag handling in low_type_binop().
Debug: Support dmalloc for pike types again.
Compiler [Typechecker]: Use alloc_pike_type() to allocate types.
Compiler [Typechecker]: Fixed leak in low_type_binop().
Compiler [Typechecker]: Clean up some of low_type_binop().
Compiler [Typechecker]: Improved handling of voidable arguments.
Compiler [Typechecker]: Compile fixes
Compiler [Typechecker]: Added PT_FLAG_REMAP_TRACE. Attempt to avoid drowning in debug output by traceing only relevant operations.
Compiler [Typechecker]: Improved checking of function types.
Runtime: Minor adjustment of rendering of string types. Fixes testsuite failure.
Compiler [Typechecker]: Fixed type_binop() on disjunct types.
Compiler [Typechecker]: Fix some C-compiler warnings.
Compiler [Typechecker]: Allow calling remap_markers() with NULL. This simplifies the code that needs to call remap_markers().
Compiler [Typechecker]: Added some more validation on PIKE_DEBUG. pike_types_le() now validates low_type_binop(MINUS, ...) against low_pike_types_le() when --with-rtldebug. It also validates that the type and type mark stacks are invariant.
Compiler [Typechecker]: Fix type stack mark leak. low_type_binop() leaked type stack marks in some cases when handling PT_BINOP_MINUS of function types.
Compiler [Typechecker]: Fixed eval mode in remap_markers(). When we are evaluating, we need to recurse even if we're not doing any remapping.
Compiler [Typechecker]: Added some validation on PIKE_DEBUG. match_types() now validates low_type_binop(AND, ...) against low_match_types() when --with-rtldebug.
Compiler [Typechecker]: Fixed low_type_binop() handling of int.
Compiler [Typechecker]: Fixed infinite loop in low_type_binop(). There was a break statement that was intended to break a loop, but instead broke a switch. Replaced with a goto. Also adds a missing break.
Compiler [Typechecker]: Added some implementation notes.
Compiler [Typechecker]: Fix some more cases in low_type_binop(). It should now handle the same cases as low_intersect_types() and low_subtract_types().
Compiler [Typechecker]: Use push_binop().
Compiler [Typechecker]: Added low_pop_type(). This function pops a type from the type stack without messing with the type mark stack.
Compiler [Typechecker]: Added push{,_reverse}_binop() This is a helper function for low_type_binop().
Compiler [Typechecker]: First implementation of low_type_binop(). This function unifies low_intersect_types() and low_subtract_types(), and is intended in the future to also support union (aka or) of types.
Compiler [Typechecker]: Added some FIXMEs.
Compiler [Typechecker]: Restructured intersect_types() somewhat.
Compiler [Typechecker]: Adjusted API for remap_markers(). remap_markers() can now be used to evaluate markers.
Compiler [Typechecker]: Fixed typos in DeMorgan special case.
Compiler [Typechecker]: Attempt to reduce amount of type expansion.
Compiler [Typechecker]: Short-circuit double type inversions.
Compiler [Typechecker]: Fixed multiple bugs in subtract_types().
Compiler [Typechecker]: Some type rendering adjustments.
Compiler [Typechecker]: Fixed some bugs in remap_marker() et al. The allocation and lookup of remapped markers now seems to work as intended.
Compiler [Typechecker]: Fixed some infinite recursion.
Compiler [Typechecker]: Added {intersect,subtract}_types().
Compiler [Typechecker]: Fixed some issues with the marker remapper. * The flags are now in an enum. * The flag constants have been renamed slightly. * The PT_FLAG_REMAP_SWAP_MARKERS flag should now work as intended. * free_marker() now also receives the flags. This is needed to avoid issues with PT_FLAG_REMAP_SWAP_MARKERS.
Compiler [Typechecker]: Added void_function_type_string.
Compiler [Typechecker]: Added PT_FLAG_BOTH_MARKERS{,_AND,_OR,_MASK}. This causes remap_markers() to use both marker sets and emit an T_AND or T_OR type when a marker is found in both.
Compiler [Typechecker]: Fixed even more typos.
Compiler [Typechecker]: Some more typo fixes.
Compiler [Typechecker]: Fixed some typos.
Compiler [Typechecker]: Added alloc_remap_marker(). Changed the remap_marker API slightly. remap_marker() is now strictly used to lookup the marker mapping, and alloc_remap_marker() to allocate a new marker in the remapped set. Also adds and defines the flag PT_FLAG_SWAP_MARKERS.
Compiler [Typechecker]: Added {push_,}remap_markers().
Compiler [Typechecker]: Preparations for remapping type markers.
Compiler [Typechecker]: Use PIKE_T_MASK.
Compiler [Typechecker]: Simplify handling of transitive types somewhat.
Compiler [Typechecker]: Support soft casting of operators to function.
Compiler [Typechecker]: Fixed issue with expanding of transient types.
Compiler [Typechecker]: Fixed issue with soft casting of complex functions.
Compiler [Typechecker]: Enable TYPE_STACK_DEBUG with l_flag.
Compiler [Typechecker]: Fix soft casting of complex function types.
Compiler [Typechecker]: Fix calling of transitive types.
Compiler [Typechecker]: Port type matching changes to pike_types_le(). * Protect against infinite recursion. * Perform proper checking of transitive types (via expand_transitive()).
Compiler [Typechecker]: Improve matching against transitive types.
Compiler [Typechecker]: Fixed some TYPE_STACK_DEBUG() calls.
Compiler [Typechecker]: Fix typo in rendering of complex function types.
Compiler [Typechecker]: Improved handling of union (aka or) types. Now that low_match_types() adds a reference to its result, we can return the matching types for both parts of a union type.
Compiler [Typechecker]: Changed calling convention for low_match_types(). low_match_types() now adds a reference to the returned type. This fixes potential issues with matching PIKE_T_OPERATOR and similar, where it could return a freed type.
Compiler [Typechecker]: Use match_types() where possible. Preparation for having low_match_types() add a reference to its return value.
Compiler [Typechecker]: Fixed invalid deref in debug code.
Compiler [Typechecker]: Protect against infinite recursion. With the addition of partially expanded types low_match_types() is at risk of infinite recursion.
Compiler [Typechecker]: Added PIKE_T_TRANSITIVE. This is a helper type to construct the type for transitive left- recursive functions (like eg many operator efuns).
Compiler [Typechecker]: Fixed issue where markers were not expanded. Fixes multiple erroneous warnings. Eg Pike v8.1 release 13 running Hilfe v3.5 (Incremental Pike Frontend) > array a = ({ `+, `-, `/ }); Compiler Warning: 1: Expected object implementing lfun `+. Compiler Warning: 1: Got : 2. Also adjusts the warning message somewhat (for when it is relevant) to Compiler Warning: 1: Expected object implementing lfun::`+().
Compiler [Typechecker]: Fixed bug in soft cast. Soft casting of complex function types (ie not consisting only of a chain of T_FUNCTION and T_MANY nodes) was broken. Potential fix for a SIGSEGV in the testsuite.
Compiler [Typechecker]: Fixed evaluation order in pike_types_le(). Fixes several obscure issues.
Compiler [Typechecker]: Added operator find_lfun. This operator returns the type for the specified lfun in the first argument. Typical intended use is for type- checking of operators. Fixes some of #10048.
Compiler [Typechecker]: Added PIKE_T_OPERATOR. Added generic support for 127 + 127 type operator functions. This reduces the amount of special cases needed to implement type operators (like eg find_lfun() or zzap_return()). Needed for #10048.
Compiler [Typechecker]: Or-ing a type and its inverse yields mixed.
Compiler [Typechecker]: Support more complex function types. Support type nodes other than T_FUNCTION and T_MANY in the cdr of T_FUNCTION nodes. Needed for #10048.
Compiler: Added some more consistency checks to the type checker.
Compiler: Added some FIXME's to the type checker.
Compiler: The type for >32-bit integers is now int. This should solve issues with strange derived types due to truncation with eg sprintf(%c). Fixes #10018.
Compiler [Typechecker]: Improved type checking. Fixed issue where constant expressions after evaluation sometimes got a partially weaker type. Eg: The expression ({ 0, 1, 2, 3 }) gets the type array(int(4bit)) from evaluating the type, but the type array(4: int) from generating a type from the value. The code generator now adds a soft-cast to the original type, causing the resulting type to be array(4: int(4bit)). Fixes testsuite failures for undumped pikes from eg SSL.Context.
Compiler [Typechecker]: Added special case for empty strings and arrays.
Compiler [Typechecker]: Type-check the length field.
Compiler: Add a starting sentinel to the type marker stack. This makes some debug checks (in eg compiler_discard_top_type()) simpler/not break on empty marker stack.
Compiler: Adjusted rendering of zero-length array and string types.
EFUNs: _typeof() now returns limited length array and string types.
Compiler: Added serialization of length-limited types.
Compiler: Fixed typo in low_describe_type(). Fixes formatting of array types.
Compiler: Fixed typo in fatal error message.
Compiler: Improved handling output from {simple,low}_describe_type(). {simple,low}_describe_type() now display the length type for array and string types if it is other than the default.
Compiler: Added low_describe_int_range(). This reduces code duplication and cleans up the code.
Compiler: Added int_pos_type_string.
Compiler: Set the length type for array types.
Compiler: Added compiler_discard_top_type().
GC: Fixed NULL-deref.
Compiler & GC: Fixed some issues with NULL in car for T_ARRAY et al.
Compiler: Support T_ARRAY and T_STRING nodes with non-NULL car. Preparation for using the car for holding the length type.
Compiler: Added push_unlimited_array_type(). This is in preparation for adding support for length-limited array types.
Runtime: Use new syntax when outputting types.
Compiler: Fixed broken fallthrough.
Compiler: Moved the value type for arrays and strings to cdr. This is in preparation for using car for the index type. This can then be used to type the lengths for array and strings.
Runtime: Allow free_type(NULL).
Compiler [Type checker]: Added peek_stack_mark().
Compiler: Warn about indexing of deprecated values.