e576bb | 2002-10-11 | Martin Nilsson | | /* -*- c -*-
|| This file is part of Pike. For copyright information see COPYRIGHT.
|| Pike is distributed under GPL, LGPL and MPL. See the file COPYING
|| for more information.
*/
|
1b10db | 2002-10-08 | Martin Nilsson | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %pure_parser
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | |
%token TOK_ARROW
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
/*
* Basic value pushing
*/
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_CONSTANT TOK_FLOAT TOK_STRING
%token TOK_NUMBER
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | /*
* These are the predefined functions that can be accessed from Pike.
*/
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_INC TOK_DEC
%token TOK_RETURN
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_EQ TOK_GE TOK_LE TOK_NE
%token TOK_NOT
%token TOK_LSH TOK_RSH
%token TOK_LAND TOK_LOR
%token TOK_SWITCH TOK_SSCANF TOK_CATCH
%token TOK_FOREACH
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | /* This is the end of file marker used by the lexer
* to enable nicer EOF in error handling.
*/
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_LEX_EOF
%token TOK_ADD_EQ
%token TOK_AND_EQ
%token TOK_ARRAY_ID
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | %token TOK_ATTRIBUTE_ID
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_BREAK
%token TOK_CASE
%token TOK_CLASS
%token TOK_COLON_COLON
|
c8feb5 | 2006-02-27 | Martin Stjernholm | | %token TOK_CONTINUE
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_DEFAULT
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | %token TOK_DEPRECATED_ID
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_DIV_EQ
%token TOK_DO
%token TOK_DOT_DOT
%token TOK_DOT_DOT_DOT
%token TOK_ELSE
|
76e7f9 | 2001-03-18 | Henrik Grubbström (Grubba) | | %token TOK_ENUM
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_EXTERN
%token TOK_FLOAT_ID
%token TOK_FOR
%token TOK_FUNCTION_ID
%token TOK_GAUGE
|
360436 | 2002-05-05 | Martin Stjernholm | | %token TOK_GLOBAL
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_IDENTIFIER
|
32bc32 | 2008-06-18 | Henrik Grubbström (Grubba) | | %token TOK_RESERVED
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_IF
%token TOK_IMPORT
%token TOK_INHERIT
|
528fe1 | 2004-10-23 | Martin Nilsson | | %token TOK_FACET
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_INLINE
%token TOK_LOCAL_ID
%token TOK_FINAL_ID
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | %token TOK_FUNCTION_NAME
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_INT_ID
%token TOK_LAMBDA
%token TOK_MULTISET_ID
%token TOK_MULTISET_END
%token TOK_MULTISET_START
%token TOK_LSH_EQ
%token TOK_MAPPING_ID
%token TOK_MIXED_ID
%token TOK_MOD_EQ
%token TOK_MULT_EQ
%token TOK_NO_MASK
%token TOK_OBJECT_ID
%token TOK_OR_EQ
%token TOK_PRIVATE
%token TOK_PROGRAM_ID
%token TOK_PROTECTED
%token TOK_PREDEF
%token TOK_PUBLIC
%token TOK_RSH_EQ
%token TOK_STATIC
%token TOK_STRING_ID
%token TOK_SUB_EQ
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | %token TOK_TYPEDEF
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_TYPEOF
|
8f733e | 2000-07-12 | Henrik Grubbström (Grubba) | | %token TOK_VARIANT
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | %token TOK_VERSION
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %token TOK_VOID_ID
%token TOK_WHILE
%token TOK_XOR_EQ
%token TOK_OPTIONAL
|
0ad650 | 2012-10-02 | Per Hedbor | | %token TOK_SAFE_INDEX
%token TOK_SAFE_START_INDEX
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
%right '='
%right '?'
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %left TOK_LOR
%left TOK_LAND
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %left '|'
%left '^'
%left '&'
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %left TOK_EQ TOK_NE
%left '>' TOK_GE '<' TOK_LE /* nonassoc? */
%left TOK_LSH TOK_RSH
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %left '+' '-'
|
413c8e | 1996-11-01 | Fredrik Hübinette (Hubbe) | | %left '*' '%' '/'
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %right TOK_NOT '~'
%nonassoc TOK_INC TOK_DEC
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
%{
/* This is the grammar definition of Pike. */
#include "global.h"
#ifdef HAVE_MEMORY_H
#include <memory.h>
#endif
|
0bfbb0 | 2004-10-26 | Henrik Grubbström (Grubba) | | #include "port.h"
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | #include "interpret.h"
#include "array.h"
#include "object.h"
|
c8feb5 | 2006-02-27 | Martin Stjernholm | | #include "mapping.h"
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | #include "stralloc.h"
#include "las.h"
#include "interpret.h"
#include "program.h"
#include "pike_types.h"
#include "constants.h"
|
bb55f8 | 1997-03-16 | Fredrik Hübinette (Hubbe) | | #include "pike_macros.h"
|
bb8a78 | 2000-12-01 | Fredrik Hübinette (Hubbe) | | #include "pike_error.h"
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | #include "docode.h"
|
1a26b2 | 2004-12-30 | Henrik Grubbström (Grubba) | | #include "pike_embed.h"
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | #include "opcodes.h"
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | #include "operators.h"
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | #include "bignum.h"
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | #define YYMAXDEPTH 1000
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | #ifndef YYDEBUG
/* May also be defined by machine.h */
|
189fd0 | 1997-01-28 | Fredrik Hübinette (Hubbe) | | #define YYDEBUG 1
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | #endif /* YYDEBUG */
|
189fd0 | 1997-01-28 | Fredrik Hübinette (Hubbe) | | #endif
|
4492b1 | 2002-01-03 | Henrik Grubbström (Grubba) | | /* Get verbose parse error reporting. */
#define YYERROR_VERBOSE 1
|
c68a29 | 2001-06-10 | Henrik Grubbström (Grubba) | | /* #define LAMBDA_DEBUG 1 */
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
94d66b | 2008-05-24 | Henrik Grubbström (Grubba) | | static void yyerror_reserved(const char *keyword);
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | static struct pike_string *get_new_name(struct pike_string *prefix);
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | int add_local_name(struct pike_string *, struct pike_type *, node *);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | int low_add_local_name(struct compiler_frame *,
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *, struct pike_type *, node *);
|
6572be | 2008-01-05 | Henrik Grubbström (Grubba) | | static void mark_lvalues_as_used(node *n);
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | static node *lexical_islocal(struct pike_string *);
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | static node *safe_inc_enum(node *n);
|
9036e8 | 2001-08-16 | Martin Stjernholm | | static int call_handle_import(struct pike_string *s);
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | static int inherit_depth;
static struct program_state *inherit_state = NULL;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
cd89d7 | 1997-09-10 | Henrik Grubbström (Grubba) | | /*
* Kludge for Bison not using prototypes.
*/
#ifndef __GNUC__
#ifndef __cplusplus
|
d5fa6a | 2002-09-24 | Henrik Grubbström (Grubba) | | static void __yy_memcpy(char *to, YY_FROM_CONST char *from,
YY_COUNT_TYPE count);
|
cd89d7 | 1997-09-10 | Henrik Grubbström (Grubba) | | #endif /* !__cplusplus */
#endif /* !__GNUC__ */
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %}
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %union
{
int number;
FLOAT_TYPE fnum;
struct node_s *n;
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | char *str;
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | void *ptr;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | }
|
4b974c | 1999-02-20 | Henrik Grubbström (Grubba) | | %{
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | /* Need to be included after YYSTYPE is defined. */
|
00dc30 | 2004-03-23 | Martin Stjernholm | | #define INCLUDED_FROM_LANGUAGE_YACC
|
4b974c | 1999-02-20 | Henrik Grubbström (Grubba) | | #include "lex.h"
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | #include "pike_compiler.h"
|
4b974c | 1999-02-20 | Henrik Grubbström (Grubba) | | %}
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | | %{
|
7ee380 | 1998-11-10 | Henrik Grubbström (Grubba) | | /* Include <stdio.h> our selves, so that we can do our magic
* without being disturbed... */
#include <stdio.h>
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | | int yylex(YYSTYPE *yylval);
|
7ee380 | 1998-11-10 | Henrik Grubbström (Grubba) | | /* Bison is stupid, and tries to optimize for space... */
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | #ifdef YYBISON
#define short int
#endif /* YYBISON */
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | |
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | | %}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %type <fnum> TOK_FLOAT
%type <number> TOK_ARRAY_ID
%type <number> TOK_BREAK
%type <number> TOK_CASE
%type <number> TOK_CATCH
%type <number> TOK_CONTINUE
%type <number> TOK_DEFAULT
%type <number> TOK_DO
%type <number> TOK_ELSE
|
528fe1 | 2004-10-23 | Martin Nilsson | | %type <number> TOK_FACET
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %type <number> TOK_FLOAT_ID
%type <number> TOK_FOR
%type <number> TOK_FOREACH
%type <number> TOK_FUNCTION_ID
%type <number> TOK_GAUGE
%type <number> TOK_IF
%type <number> TOK_INHERIT
%type <number> TOK_INLINE
%type <number> TOK_INT_ID
%type <number> TOK_LAMBDA
%type <number> TOK_LOCAL_ID
%type <number> TOK_MAPPING_ID
%type <number> TOK_MIXED_ID
%type <number> TOK_MULTISET_ID
%type <number> TOK_NO_MASK
%type <number> TOK_OBJECT_ID
%type <number> TOK_PREDEF
%type <number> TOK_PRIVATE
%type <number> TOK_PROGRAM_ID
%type <number> TOK_PROTECTED
%type <number> TOK_PUBLIC
%type <number> TOK_RETURN
%type <number> TOK_SSCANF
%type <number> TOK_STATIC
%type <number> TOK_STRING_ID
%type <number> TOK_SWITCH
%type <number> TOK_VOID_ID
%type <number> TOK_WHILE
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <number> arguments
%type <number> arguments2
|
febbc8 | 1997-04-22 | Fredrik Hübinette (Hubbe) | | %type <number> func_args
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | %type <number> create_arguments
%type <number> create_arguments2
%type <number> create_arg
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <number> assign
%type <number> modifier
%type <number> modifier_list
%type <number> modifiers
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | %type <number> implicit_modifiers
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | %type <number> inherit_specifier
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | %type <number> function_type_list
%type <number> function_type_list2
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <number> optional_dot_dot_dot
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | %type <number> optional_comma
|
6fe35d | 2007-09-14 | Henrik Grubbström (Grubba) | | %type <number> optional_constant
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | %type <number> optional_create_arguments
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <number> optional_stars
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | %type <str> magic_identifiers
%type <str> magic_identifiers1
%type <str> magic_identifiers2
%type <str> magic_identifiers3
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | /* The following symbols return type information */
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
011ad3 | 1999-10-22 | Fredrik Hübinette (Hubbe) | | %type <n> number_or_minint
%type <n> number_or_maxint
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | %type <n> cast
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | %type <n> soft_cast
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | %type <n> simple_type
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | %type <n> simple_type2
%type <n> simple_identifier_type
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | %type <n> string_constant
|
9aee97 | 2008-05-06 | Henrik Grubbström (Grubba) | | %type <n> string_segment
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | %type <n> string
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %type <n> TOK_STRING
%type <n> TOK_NUMBER
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | %type <n> optional_attributes
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | %type <n> optional_rename_inherit
%type <n> optional_identifier
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | %type <n> implicit_identifier
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | %type <n> TOK_IDENTIFIER
|
32bc32 | 2008-06-18 | Henrik Grubbström (Grubba) | | %type <n> TOK_RESERVED
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | %type <n> TOK_VERSION
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | %type <n> attribute
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> assoc_pair
|
9b3902 | 2003-03-27 | Martin Stjernholm | | %type <n> line_number_info
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> block
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | %type <n> optional_block
|
01d3e2 | 1997-04-23 | Fredrik Hübinette (Hubbe) | | %type <n> failsafe_block
|
10fe60 | 2003-10-01 | Martin Stjernholm | | %type <n> open_paren_with_line_info
|
bb213c | 1999-12-27 | Henrik Grubbström (Grubba) | | %type <n> close_paren_or_missing
|
10fe60 | 2003-10-01 | Martin Stjernholm | | %type <n> open_bracket_with_line_info
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> block_or_semi
%type <n> break
%type <n> case
%type <n> catch
%type <n> catch_arg
%type <n> class
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | %type <n> enum
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | %type <n> enum_value
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | %type <n> safe_comma_expr
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> comma_expr
%type <n> comma_expr2
|
408a1e | 2004-10-30 | Martin Stjernholm | | %type <n> range_bound
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> cond
%type <n> continue
%type <n> default
%type <n> do
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | %type <n> safe_expr0
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> expr00
%type <n> expr01
%type <n> expr1
%type <n> expr2
%type <n> expr3 expr0
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | %type <n> apply
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> expr4
%type <n> expr_list
%type <n> expr_list2
%type <n> for
%type <n> for_expr
%type <n> foreach
%type <n> gauge
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | %type <n> idents
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | %type <n> idents2
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | %type <n> labeled_statement
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> lambda
%type <n> local_name_list
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | %type <n> local_name_list2
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | %type <n> low_idents
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | %type <n> safe_lvalue
|
3ddb53 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> lvalue
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> lvalue_list
|
2a3269 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | %type <n> low_lvalue_list
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> m_expr_list
%type <n> m_expr_list2
%type <n> new_local_name
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | %type <n> new_local_name2
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | %type <n> normal_label_statement
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> optional_else_part
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | %type <n> optional_label
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | %type <n> propagated_enum_value
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | %type <n> propagated_type
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> return
%type <n> sscanf
%type <n> statement
%type <n> statements
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | %type <n> statement_with_semicolon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | %type <n> switch
%type <n> typeof
%type <n> unused
%type <n> unused2
%type <n> while
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | %type <n> optional_comma_expr
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | %type <n> low_program_ref
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | %type <n> inherit_ref
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | %type <n> local_function
%type <n> local_function2
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | %type <n> magic_identifier
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | %type <n> simple_identifier
|
4cdb80 | 2001-02-23 | Fredrik Hübinette (Hubbe) | | %type <n> foreach_lvalues
%type <n> foreach_optional_lvalue
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | |
%type <ptr> push_compiler_frame0
%type <ptr> push_compiler_frame1
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %%
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | all: program { YYACCEPT; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | program TOK_LEX_EOF { YYACCEPT; }
/* | error TOK_LEX_EOF { YYABORT; } */
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
9ce6b6 | 2000-09-20 | Henrik Grubbström (Grubba) | | program: program def
| program ';'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | /* empty */
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | string_constant: string
| string_constant '+' string
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | struct pike_string *a,*b;
copy_shared_string(a,$1->u.sval.u.string);
copy_shared_string(b,$3->u.sval.u.string);
free_node($1);
free_node($3);
a=add_and_free_shared_strings(a,b);
$$=mkstrnode(a);
free_string(a);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | optional_rename_inherit: ':' TOK_IDENTIFIER { $$=$2; }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | ':' bad_identifier { $$=0; }
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | | ':' error { $$=0; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | { $$=0; }
;
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | |
|
66c236 | 1998-08-29 | Henrik Grubbström (Grubba) | | /* NOTE: This rule pushes a string "name" on the stack in addition
* to resolving the program reference.
*/
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | low_program_ref: string_constant
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | STACK_LEVEL_START(0);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | ref_push_string($1->u.sval.u.string);
|
9036e8 | 2001-08-16 | Martin Stjernholm | | if (call_handle_inherit($1->u.sval.u.string)) {
|
cf2ad9 | 2008-06-24 | Henrik Grubbström (Grubba) | | STACK_LEVEL_CHECK(2);
|
9036e8 | 2001-08-16 | Martin Stjernholm | | $$=mksvaluenode(Pike_sp-1);
pop_stack();
|
10e16f | 1999-11-04 | Henrik Grubbström (Grubba) | | }
|
9036e8 | 2001-08-16 | Martin Stjernholm | | else
$$=mknewintnode(0);
|
cf2ad9 | 2008-06-24 | Henrik Grubbström (Grubba) | | STACK_LEVEL_CHECK(1);
|
43fc17 | 1999-09-19 | Fredrik Hübinette (Hubbe) | | if($$->name) free_string($$->name);
|
cf2ad9 | 2008-06-24 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) != T_STRING) {
|
cf2ad9 | 2008-06-24 | Henrik Grubbström (Grubba) | | Pike_fatal("Compiler lost track of program name.\n");
}
#endif /* PIKE_DEBUG */
/* FIXME: Why not use $1->u.sval.u.string here? */
|
9036e8 | 2001-08-16 | Martin Stjernholm | | add_ref( $$->name=Pike_sp[-1].u.string );
free_node($1);
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | |
STACK_LEVEL_DONE(1);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
| idents
{
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | STACK_LEVEL_START(0);
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier)
|
8d7bda | 1997-02-10 | Fredrik Hübinette (Hubbe) | | {
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | ref_push_string(Pike_compiler->last_identifier);
|
8d7bda | 1997-02-10 | Fredrik Hübinette (Hubbe) | | }else{
|
7863d6 | 2005-05-06 | Martin Nilsson | | push_empty_string();
|
8d7bda | 1997-02-10 | Fredrik Hübinette (Hubbe) | | }
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | $$=$1;
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | |
STACK_LEVEL_DONE(1);
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | }
;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
66c236 | 1998-08-29 | Henrik Grubbström (Grubba) | | /* NOTE: Pushes the resolved program on the stack. */
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | program_ref: low_program_ref
{
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | STACK_LEVEL_START(0);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | resolv_program($1);
free_node($1);
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | |
STACK_LEVEL_DONE(1);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
;
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | |
|
528fe1 | 2004-10-23 | Martin Nilsson | | facet: TOK_FACET TOK_IDENTIFIER ':' idents ';'
{
|
2c660c | 2005-12-31 | Martin Nilsson | | #ifdef WITH_FACETS
|
528fe1 | 2004-10-23 | Martin Nilsson | | struct object *o;
if (Pike_compiler->compiler_pass == 1) {
|
6f9669 | 2009-09-12 | Henrik Grubbström (Grubba) | | if (Pike_compiler->new_program->flags & PROGRAM_IS_FACET) {
|
1fb2de | 2004-10-23 | Martin Nilsson | | yyerror("A class can only belong to one facet.");
|
528fe1 | 2004-10-23 | Martin Nilsson | | }
else {
resolv_constant($4);
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) == T_OBJECT) {
|
f54c78 | 2004-12-22 | Henrik Grubbström (Grubba) | | /* FIXME: Object subtypes! */
|
528fe1 | 2004-10-23 | Martin Nilsson | | o = Pike_sp[-1].u.object;
|
960cca | 2004-11-06 | Martin Nilsson | | ref_push_string($2->u.sval.u.string);
|
528fe1 | 2004-10-23 | Martin Nilsson | | push_int(Pike_compiler->new_program->id);
|
6f9669 | 2009-09-12 | Henrik Grubbström (Grubba) | | push_int(!!(Pike_compiler->new_program->flags & PROGRAM_IS_PRODUCT));
|
ef9a24 | 2006-07-06 | Henrik Grubbström (Grubba) | | safe_apply(o, "add_facet_class", 3);
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) == T_INT &&
|
528fe1 | 2004-10-23 | Martin Nilsson | | Pike_sp[-1].u.integer >= 0) {
|
6f9669 | 2009-09-12 | Henrik Grubbström (Grubba) | | Pike_compiler->new_program->flags &= ~PROGRAM_IS_PRODUCT;
Pike_compiler->new_program->flags |= PROGRAM_IS_FACET;
|
528fe1 | 2004-10-23 | Martin Nilsson | | Pike_compiler->new_program->facet_index = Pike_sp[-1].u.integer;
add_ref(Pike_compiler->new_program->facet_group = o);
}
else
yyerror("Could not add facet class to system.");
|
1a796b | 2004-10-30 | Martin Nilsson | | pop_stack();
|
528fe1 | 2004-10-23 | Martin Nilsson | | }
else
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | yyerror("Invalid facet group specifier.");
|
1a796b | 2004-10-30 | Martin Nilsson | | pop_stack();
|
528fe1 | 2004-10-23 | Martin Nilsson | | }
}
|
1a796b | 2004-10-30 | Martin Nilsson | | free_node($2);
free_node($4);
|
2c660c | 2005-12-31 | Martin Nilsson | | #else
yyerror("No support for facets.");
#endif
|
528fe1 | 2004-10-23 | Martin Nilsson | | }
;
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | inherit_ref:
{
SET_FORCE_RESOLVE($<number>$);
}
low_program_ref
{
UNSET_FORCE_RESOLVE($<number>1);
$$ = $2;
}
;
inheritance: modifiers TOK_INHERIT inherit_ref optional_rename_inherit ';'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (($1 & ID_EXTERN) && (Pike_compiler->compiler_pass == 1)) {
|
8fd931 | 1999-12-30 | Henrik Grubbström (Grubba) | | yywarning("Extern declared inherit.");
}
|
d16515 | 2008-05-03 | Henrik Grubbström (Grubba) | | if($3)
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct pike_string *s=Pike_sp[-1].u.string;
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if($4) s=$4->u.sval.u.string;
compiler_do_inherit($3,$1,s);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
|
528fe1 | 2004-10-23 | Martin Nilsson | |
|
2c660c | 2005-12-31 | Martin Nilsson | | #ifdef WITH_FACETS
|
528fe1 | 2004-10-23 | Martin Nilsson | | /* If this is a product class, check that all product classes in its
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | * facet-group inherit from all facets */
|
528fe1 | 2004-10-23 | Martin Nilsson | | if($3 && Pike_compiler->compiler_pass == 2) {
|
6f9669 | 2009-09-12 | Henrik Grubbström (Grubba) | | if (Pike_compiler->new_program->flags & PROGRAM_IS_PRODUCT) {
|
528fe1 | 2004-10-23 | Martin Nilsson | | if (!Pike_compiler->new_program->facet_group)
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | yyerror("Product class without facet group.");
else {
safe_apply(Pike_compiler->new_program->facet_group,
"product_classes_checked", 0);
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) == T_INT &&
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | Pike_sp[-1].u.integer == 0) {
pop_stack();
|
ef9a24 | 2006-07-06 | Henrik Grubbström (Grubba) | | safe_apply(Pike_compiler->new_program->facet_group,
"check_product_classes", 0);
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | }
|
528fe1 | 2004-10-23 | Martin Nilsson | | pop_stack();
}
}
}
|
2c660c | 2005-12-31 | Martin Nilsson | | #endif
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if($4) free_node($4);
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | pop_stack();
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if ($3) free_node($3);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | | modifiers TOK_INHERIT inherit_ref error ';'
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if ($3) free_node($3);
|
48e410 | 2001-12-20 | Martin Stjernholm | | pop_stack();
yyerrok;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | | modifiers TOK_INHERIT inherit_ref error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if ($3) free_node($3);
|
48e410 | 2001-12-20 | Martin Stjernholm | | pop_stack();
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | | modifiers TOK_INHERIT inherit_ref error '}'
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
2ebdad | 2004-03-16 | Henrik Grubbström (Grubba) | | if ($3) free_node($3);
|
48e410 | 2001-12-20 | Martin Stjernholm | | pop_stack();
yyerror("Missing ';'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | modifiers TOK_INHERIT error ';' { yyerrok; }
| modifiers TOK_INHERIT error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | modifiers TOK_INHERIT error '}' { yyerror("Missing ';'."); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | import: TOK_IMPORT idents ';'
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | {
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | resolv_constant($2);
free_node($2);
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | use_module(Pike_sp-1);
|
45e8a8 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | pop_stack();
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IMPORT string ';'
|
eb5c90 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | {
|
9036e8 | 2001-08-16 | Martin Stjernholm | | if (call_handle_import($2->u.sval.u.string)) {
use_module(Pike_sp-1);
pop_stack();
|
10e16f | 1999-11-04 | Henrik Grubbström (Grubba) | | }
|
9036e8 | 2001-08-16 | Martin Stjernholm | | free_node($2);
|
eb5c90 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IMPORT error ';' { yyerrok; }
| TOK_IMPORT error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IMPORT error '}' { yyerror("Missing ';'."); }
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | ;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | constant_name: TOK_IDENTIFIER '=' safe_expr0
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
/* This can be made more lenient in the future */
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
/* Ugly hack to make sure that $3 is optimized */
|
b5c905 | 2000-08-19 | Henrik Grubbström (Grubba) | | {
int tmp=Pike_compiler->compiler_pass;
$3=mknode(F_COMMA_EXPR,$3,0);
Pike_compiler->compiler_pass=tmp;
}
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | if (!TEST_COMPAT(7, 6) && (Pike_compiler->current_modifiers & ID_EXTERN)) {
int depth = 0;
struct program_state *state = Pike_compiler;
node *n = $3;
while (((n->token == F_COMMA_EXPR) || (n->token == F_ARG_LIST)) &&
((!CAR(n)) ^ (!CDR(n)))) {
if (CAR(n)) n = CAR(n);
else n = CDR(n);
}
if (n->token == F_EXTERNAL) {
while (state && (state->new_program->id != n->u.integer.a)) {
depth++;
state = state->previous;
|
09afd2 | 2008-06-19 | Henrik Grubbström (Grubba) | | }
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | }
if (depth && state) {
/* Alias for a symbol in a surrounding scope. */
int id = really_low_reference_inherited_identifier(state, 0,
n->u.integer.b);
define_alias($1->u.sval.u.string, n->type,
Pike_compiler->current_modifiers & ~ID_EXTERN,
depth, id);
} else if (Pike_compiler->compiler_pass == 1) {
yyerror("Invalid extern declared constant.");
add_constant($1->u.sval.u.string, &svalue_undefined,
|
019b3d | 2000-07-09 | Henrik Grubbström (Grubba) | | Pike_compiler->current_modifiers & ~ID_EXTERN);
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | }
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | } else {
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | if (TEST_COMPAT(7, 6) &&
(Pike_compiler->current_modifiers & ID_EXTERN) &&
(Pike_compiler->compiler_pass == 1)) {
|
2af6fa | 2008-07-13 | Henrik Grubbström (Grubba) | | yywarning("Extern declared constant.");
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | }
if(!is_const($3)) {
|
8b07b3 | 2008-07-13 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
yyerror("Constant definition is not constant.");
}
add_constant($1->u.sval.u.string, 0,
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | Pike_compiler->current_modifiers & ~ID_EXTERN);
} else {
if(!Pike_compiler->num_parse_error)
|
57cddc | 1998-04-19 | Per Hedbor | | {
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | ptrdiff_t tmp=eval_low($3,1);
if(tmp < 1)
{
yyerror("Error in constant definition.");
push_undefined();
}else{
pop_n_elems(DO_NOT_WARN((INT32)(tmp - 1)));
}
} else {
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | push_undefined();
|
57cddc | 1998-04-19 | Per Hedbor | | }
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | add_constant($1->u.sval.u.string, Pike_sp-1,
Pike_compiler->current_modifiers & ~ID_EXTERN);
pop_stack();
|
c6ae0c | 1996-11-26 | Fredrik Hübinette (Hubbe) | | }
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
|
bcf72b | 2008-07-13 | Henrik Grubbström (Grubba) | | const_def_ok:
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | if($3) free_node($3);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($1);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | | bad_identifier '=' safe_expr0 { if ($3) free_node($3); }
| error '=' safe_expr0 { if ($3) free_node($3); }
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | ;
constant_list: constant_name
| constant_list ',' constant_name
;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | constant: modifiers TOK_CONSTANT constant_list ';' {}
| modifiers TOK_CONSTANT error ';' { yyerrok; }
| modifiers TOK_CONSTANT error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | modifiers TOK_CONSTANT error '}' { yyerror("Missing ';'."); }
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | ;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | block_or_semi: block
{
|
0b8458 | 2007-10-06 | Henrik Grubbström (Grubba) | | $$ = mknode(F_COMMA_EXPR,$1,mknode(F_RETURN,mkintnode(0),0));
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | | ';' { $$ = NULL; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF { yyerror("Expected ';'."); $$ = NULL; }
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | | error { $$ = NULL; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
type_or_error: simple_type
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
|
0b8458 | 2007-10-06 | Henrik Grubbström (Grubba) | | check_type_string($1->u.sval.u.type);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #endif /* PIKE_DEBUG */
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_frame->current_type)
|
0ad650 | 2012-10-02 | Per Hedbor | | free_type(Pike_compiler->compiler_frame->current_type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_type,
$1->u.sval.u.type);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($1);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | ;
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | |
|
10fe60 | 2003-10-01 | Martin Stjernholm | | open_paren_with_line_info: '('
{
/* Used to hold line-number info */
$$ = mkintnode(0);
}
;
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | close_paren_or_missing: ')'
|
bb213c | 1999-12-27 | Henrik Grubbström (Grubba) | | {
/* Used to hold line-number info */
$$ = mkintnode(0);
}
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | | /* empty */
{
yyerror("Missing ')'.");
|
bb213c | 1999-12-27 | Henrik Grubbström (Grubba) | | /* Used to hold line-number info */
$$ = mkintnode(0);
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | }
;
close_brace_or_missing: '}'
| /* empty */
{
yyerror("Missing '}'.");
}
;
|
d4c3e0 | 2002-05-02 | Henrik Grubbström (Grubba) | | close_brace_or_eof: '}'
| TOK_LEX_EOF
{
yyerror("Missing '}'.");
}
;
|
10fe60 | 2003-10-01 | Martin Stjernholm | | open_bracket_with_line_info: '['
{
/* Used to hold line-number info */
$$ = mkintnode(0);
}
;
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | close_bracket_or_missing: ']'
| /* empty */
{
yyerror("Missing ']'.");
}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | push_compiler_frame0: /* empty */
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
8322b6 | 2000-05-08 | Fredrik Hübinette (Hubbe) | | push_compiler_frame(SCOPE_LOCAL);
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(!Pike_compiler->compiler_frame->previous ||
!Pike_compiler->compiler_frame->previous->current_type)
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
392c79 | 2004-11-05 | Henrik Grubbström (Grubba) | | yyerror("Internal compiler error (push_compiler_frame0).");
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_type,
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | mixed_type_string);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }else{
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_type,
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->previous->current_type);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | |
$$ = Pike_compiler->compiler_frame;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
3ec3df | 1999-12-16 | Henrik Grubbström (Grubba) | | ;
|
6fe35d | 2007-09-14 | Henrik Grubbström (Grubba) | | optional_constant: /* empty */
{
$$ = OPT_EXTERNAL_DEPEND|OPT_SIDE_EFFECT;
}
| TOK_CONSTANT
{
$$ = 0;
}
;
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | def: modifiers optional_attributes type_or_error optional_constant optional_stars
|
6fe35d | 2007-09-14 | Henrik Grubbström (Grubba) | | TOK_IDENTIFIER push_compiler_frame0
|
0ad650 | 2012-10-02 | Per Hedbor | | '('
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | {
$<number>$ = 0;
/* Check for the (very special) case of create and create_args. */
if (Pike_compiler->num_create_args) {
struct pike_string *create_string = NULL;
int e;
MAKE_CONST_STRING(create_string, "create");
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($6->u.sval.u.string == create_string) {
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | if (TEST_COMPAT(7, 6)) {
yywarning("Having both an implicit and an explicit create() "
"was not supported in Pike 7.6 and before.");
}
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | /* Prepend the create arguments. */
if (Pike_compiler->num_create_args < 0) {
Pike_compiler->varargs = 1;
for (e = 0; e < -Pike_compiler->num_create_args; e++) {
struct identifier *id =
Pike_compiler->new_program->identifiers + e;
add_ref(id->type);
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | add_local_name(empty_pike_string, id->type, 0);
|
1686e2 | 2008-06-25 | Henrik Grubbström (Grubba) | | /* Note: add_local_name() above will return e. */
Pike_compiler->compiler_frame->variable[e].flags |=
LOCAL_VAR_IS_USED;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
} else {
for (e = 0; e < Pike_compiler->num_create_args; e++) {
struct identifier *id =
Pike_compiler->new_program->identifiers + e;
add_ref(id->type);
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | add_local_name(empty_pike_string, id->type, 0);
|
1686e2 | 2008-06-25 | Henrik Grubbström (Grubba) | | /* Note: add_local_name() above will return e. */
Pike_compiler->compiler_frame->variable[e].flags |=
LOCAL_VAR_IS_USED;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
}
$<number>$ = e;
}
}
}
arguments close_paren_or_missing
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
int e;
|
6fe35d | 2007-09-14 | Henrik Grubbström (Grubba) | |
/* Adjust opt_flags in case we've got an optional_constant. */
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->opt_flags = $4;
|
6fe35d | 2007-09-14 | Henrik Grubbström (Grubba) | |
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | /* construct the function type */
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_type);
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($5 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | while(--$5>=0) push_type(T_ARRAY);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_frame->current_return_type)
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(Pike_compiler->compiler_frame->current_return_type);
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->current_return_type = compiler_pop_type();
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_return_type);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | e = $<number>9 + $10 - 1;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | if(Pike_compiler->varargs &&
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | (!$<number>9 || (Pike_compiler->num_create_args >= 0)))
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | e--;
|
5b368e | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_type_stack(T_ARRAY);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }else{
push_type(T_VOID);
}
push_type(T_MANY);
for(; e>=0; e--)
{
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | push_type(T_FUNCTION);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | |
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($2) {
node *n = $2;
while (n) {
push_type_attribute(CDR(n)->u.sval.u.string);
n = CAR(n);
}
}
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s=compiler_pop_type();
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | int i = isidentifier($6->u.sval.u.string);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
if (Pike_compiler->compiler_pass == 1) {
if ($1 & ID_VARIANT) {
/* FIXME: Lookup the type of any existing variant */
/* Or the types. */
fprintf(stderr, "Pass %d: Identifier %s:\n",
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, $6->u.sval.u.string->str);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
if (i >= 0) {
struct identifier *id = ID_FROM_INT(Pike_compiler->new_program, i);
if (id) {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *new_type;
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | fprintf(stderr, "Defined, type:\n");
|
57198b | 2000-07-18 | Martin Stjernholm | | #ifdef PIKE_DEBUG
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | simple_describe_type(id->type);
|
57198b | 2000-07-18 | Martin Stjernholm | | #endif
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
new_type = or_pike_types(s, id->type, 1);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | s = new_type;
fprintf(stderr, "Resulting type:\n");
|
57198b | 2000-07-18 | Martin Stjernholm | | #ifdef PIKE_DEBUG
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | simple_describe_type(s);
|
57198b | 2000-07-18 | Martin Stjernholm | | #endif
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | } else {
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Lost identifier %S (%d).",
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $6->u.sval.u.string, i);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | }
} else {
fprintf(stderr, "Not defined.\n");
}
fprintf(stderr, "New type:\n");
|
57198b | 2000-07-18 | Martin Stjernholm | | #ifdef PIKE_DEBUG
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | simple_describe_type(s);
|
57198b | 2000-07-18 | Martin Stjernholm | | #endif
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | }
} else {
/* FIXME: Second pass reuses the type from the end of
* the first pass if this is a variant function.
*/
if (i >= 0) {
if (Pike_compiler->new_program->identifier_references[i].id_flags &
ID_VARIANT) {
struct identifier *id = ID_FROM_INT(Pike_compiler->new_program, i);
fprintf(stderr, "Pass %d: Identifier %s:\n",
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, $6->u.sval.u.string->str);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(s, id->type);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
fprintf(stderr, "Resulting type:\n");
|
57198b | 2000-07-18 | Martin Stjernholm | | #ifdef PIKE_DEBUG
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | simple_describe_type(s);
|
57198b | 2000-07-18 | Martin Stjernholm | | #endif
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | }
} else {
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Identifier %S lost after first pass.",
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $6->u.sval.u.string);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | }
}
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | $<n>$ = mktypenode(s);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | }
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | /* if(Pike_compiler->compiler_pass==1) */
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
6fd517 | 2000-04-25 | Fredrik Hübinette (Hubbe) | | /* FIXME:
* set current_function_number for local functions as well
*/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_frame->current_function_number=
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | define_function($6->u.sval.u.string,
|
0b8458 | 2007-10-06 | Henrik Grubbström (Grubba) | | $<n>$->u.sval.u.type,
|
6fd517 | 2000-04-25 | Fredrik Hübinette (Hubbe) | | $1 & (~ID_EXTERN),
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | IDENTIFIER_PIKE_FUNCTION |
(Pike_compiler->varargs?IDENTIFIER_VARARGS:0),
|
1ef557 | 2000-08-30 | Henrik Grubbström (Grubba) | | 0,
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $4);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | Pike_compiler->varargs=0;
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | if ($1 & ID_VARIANT) {
fprintf(stderr, "Function number: %d\n",
Pike_compiler->compiler_frame->current_function_number);
}
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
block_or_semi
{
int e;
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if($13)
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
22edc2 | 1998-01-29 | Fredrik Hübinette (Hubbe) | | int f;
|
b9188f | 1999-12-13 | Henrik Grubbström (Grubba) | | node *check_args = NULL;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
struct pike_string *save_file = c->lex.current_file;
int save_line = c->lex.current_line;
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | int num_required_args = 0;
|
1ef557 | 2000-08-30 | Henrik Grubbström (Grubba) | | struct identifier *i;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_file = $6->current_file;
c->lex.current_line = $6->line_number;
|
b9188f | 1999-12-13 | Henrik Grubbström (Grubba) | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (($1 & ID_EXTERN) && (Pike_compiler->compiler_pass == 1)) {
|
8fd931 | 1999-12-30 | Henrik Grubbström (Grubba) | | yywarning("Extern declared function definition.");
}
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | for(e=0; e<$<number>9+$10; e++)
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if((e >= $<number>9) &&
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | (!Pike_compiler->compiler_frame->variable[e].name ||
!Pike_compiler->compiler_frame->variable[e].name->len))
|
b9188f | 1999-12-13 | Henrik Grubbström (Grubba) | | {
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | my_yyerror("Missing name for argument %d.", e - $<number>9);
|
b9188f | 1999-12-13 | Henrik Grubbström (Grubba) | | } else {
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
if ($1 & ID_VARIANT) {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *arg_type =
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[e].type;
/* FIXME: Generate code that checks the arguments. */
/* If there is a bad argument, call the fallback, and return. */
if (! pike_types_le(void_type_string, arg_type)) {
/* Argument my not be void.
* ie it's required.
*/
num_required_args++;
}
} else {
/* FIXME: Should probably use some other flag. */
if ((runtime_options & RUNTIME_CHECK_TYPES) &&
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | (Pike_compiler->compiler_frame->variable[e].type !=
mixed_type_string)) {
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | node *local_node;
/* fprintf(stderr, "Creating soft cast node for local #%d\n", e);*/
local_node = mklocalnode(e, 0);
/* The following is needed to go around the optimization in
* mksoftcastnode().
*/
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(local_node->type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(local_node->type, mixed_type_string);
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | |
check_args =
mknode(F_COMMA_EXPR, check_args,
mksoftcastnode(Pike_compiler->compiler_frame->variable[e].type,
local_node));
}
|
8f733e | 2000-07-12 | Henrik Grubbström (Grubba) | | }
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
b9188f | 1999-12-13 | Henrik Grubbström (Grubba) | | }
}
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | if ($1 & ID_VARIANT) {
struct pike_string *bad_arg_str;
|
de56ec | 2003-02-08 | Martin Stjernholm | | MAKE_CONST_STRING(bad_arg_str,
"Bad number of arguments!\n");
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | |
fprintf(stderr, "Required args: %d\n", num_required_args);
check_args =
mknode('?',
mkopernode("`<",
mkefuncallnode("query_num_arg", NULL),
mkintnode(num_required_args)),
mknode(':',
mkefuncallnode("throw",
mkefuncallnode("aggregate",
mkstrnode(bad_arg_str))),
NULL));
}
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($<number>9) {
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | /* Hook in the initializers for the create arguments. */
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | for (e = $<number>9; e--;) {
$13 = mknode(F_COMMA_EXPR,
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | mknode(F_POP_VALUE,
mknode(F_ASSIGN, mklocalnode(e, 0),
mkidentifiernode(e)), NULL),
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $13);
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
}
|
587c6a | 2001-06-30 | Martin Stjernholm | | {
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | int l = $13->line_number;
struct pike_string *f = $13->current_file;
|
587c6a | 2001-06-30 | Martin Stjernholm | | if (check_args) {
/* Prepend the arg checking code. */
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $13 = mknode(F_COMMA_EXPR, mknode(F_POP_VALUE, check_args, NULL), $13);
|
587c6a | 2001-06-30 | Martin Stjernholm | | }
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = l;
c->lex.current_file = f;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
329cc0 | 1997-02-17 | Fredrik Hübinette (Hubbe) | |
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | f=dooptcode($6->u.sval.u.string, $13, $<n>12->u.sval.u.type, $1);
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | |
|
1ef557 | 2000-08-30 | Henrik Grubbström (Grubba) | | i = ID_FROM_INT(Pike_compiler->new_program, f);
i->opt_flags = Pike_compiler->compiler_frame->opt_flags;
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | if ($1 & ID_VARIANT) {
fprintf(stderr, "Function number: %d\n", f);
}
|
71f3a2 | 1998-11-22 | Fredrik Hübinette (Hubbe) | | #ifdef PIKE_DEBUG
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | if(Pike_interpreter.recoveries &&
((Pike_sp - Pike_interpreter.evaluator_stack) <
Pike_interpreter.recoveries->stack_pointer))
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Stack error (underflow)\n");
|
ae9503 | 1999-04-07 | Fredrik Hübinette (Hubbe) | |
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | if((Pike_compiler->compiler_pass == 1) &&
|
d4c3e0 | 2002-05-02 | Henrik Grubbström (Grubba) | | (f != Pike_compiler->compiler_frame->current_function_number)) {
fprintf(stderr, "define_function()/do_opt_code() failed for symbol %s\n",
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | $6->u.sval.u.string->str);
|
d4c3e0 | 2002-05-02 | Henrik Grubbström (Grubba) | | dump_program_desc(Pike_compiler->new_program);
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("define_function screwed up! %d != %d\n",
|
be57ea | 2000-07-14 | Henrik Grubbström (Grubba) | | f, Pike_compiler->compiler_frame->current_function_number);
|
d4c3e0 | 2002-05-02 | Henrik Grubbström (Grubba) | | }
|
294dc5 | 1997-08-03 | Fredrik Hübinette (Hubbe) | | #endif
|
c3453f | 2001-06-30 | Martin Stjernholm | |
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = save_line;
c->lex.current_file = save_file;
|
b715a9 | 2008-01-04 | Henrik Grubbström (Grubba) | | } else {
/* Prototype; don't warn about unused arguments. */
|
0b7dff | 2008-01-04 | Henrik Grubbström (Grubba) | | for (e = Pike_compiler->compiler_frame->current_number_of_locals; e--;) {
|
b715a9 | 2008-01-04 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[e].flags |= LOCAL_VAR_IS_USED;
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $7) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $7,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_compiler_frame();
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | free_node($6);
free_node($11);
free_node($<n>12);
if ($2) free_node($2);
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | }
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | | modifiers optional_attributes type_or_error optional_constant optional_stars TOK_IDENTIFIER push_compiler_frame0
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | error
{
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $7) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $7,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | pop_compiler_frame();
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | free_node($6);
if ($2)
free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | | modifiers optional_attributes type_or_error optional_constant optional_stars bad_identifier
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($2)
free_node($2);
|
884b6f | 2008-06-17 | Martin Stjernholm | | compiler_discard_type();
|
33b82c | 1999-12-19 | Henrik Grubbström (Grubba) | | }
'(' arguments ')' block_or_semi
{
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($11) free_node($11);
}
| modifiers optional_attributes type_or_error optional_constant name_list ';'
{
if ($2) {
yyerror("Invalid use of attributes in variable declaration.\n");
free_node($2);
}
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | inheritance {}
|
528fe1 | 2004-10-23 | Martin Nilsson | | | facet {}
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | | import {}
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | | constant {}
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | | modifiers class { free_node($2); }
| modifiers enum { free_node($2); }
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | | typedef {}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
reset_type_stack();
yyerror("Missing ';'.");
yyerror("Unexpected end of file");
}
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | | error ';'
{
reset_type_stack();
yyerrok;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | /* if(Pike_compiler->num_parse_error>5) YYACCEPT; */
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | }
|
296836 | 1998-04-14 | Henrik Grubbström (Grubba) | | | error '}'
{
reset_type_stack();
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Missing ';'.");
|
eb5c90 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | /* yychar = '}'; */ /* Put the '}' back on the input stream */
|
296836 | 1998-04-14 | Henrik Grubbström (Grubba) | | }
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | | modifiers
|
0ad650 | 2012-10-02 | Per Hedbor | | '{'
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | $<number>$=THIS_COMPILATION->lex.pragmas;
THIS_COMPILATION->lex.pragmas|=$1;
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | }
program
|
d4c3e0 | 2002-05-02 | Henrik Grubbström (Grubba) | | close_brace_or_eof
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | THIS_COMPILATION->lex.pragmas=$<number>3;
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | optional_dot_dot_dot: TOK_DOT_DOT_DOT { $$=1; }
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | | TOK_DOT_DOT
{
yyerror("Range indicator ('..') where elipsis ('...') expected.");
$$=1;
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | /* empty */ { $$=0; }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | optional_identifier: TOK_IDENTIFIER
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | bad_identifier { $$=0; }
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | | /* empty */ { $$=0; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | new_arg_name: type7 optional_dot_dot_dot optional_identifier
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
01e7e5 | 2008-01-03 | Henrik Grubbström (Grubba) | | int i;
|
c3cfe9 | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->varargs) yyerror("Can't define more arguments after ...");
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | if($2)
{
push_type(T_ARRAY);
|
c3cfe9 | 2000-07-10 | Henrik Grubbström (Grubba) | | Pike_compiler->varargs=1;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | |
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | if(!$3)
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | {
|
de56ec | 2003-02-08 | Martin Stjernholm | | $3=mkstrnode(empty_pike_string);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | }
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
96ab24 | 1998-02-28 | Fredrik Hübinette (Hubbe) | | if($3->u.sval.u.string->len &&
|
fe8061 | 2000-09-05 | Henrik Grubbström (Grubba) | | islocal($3->u.sval.u.string) >= 0)
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Variable %S appears twice in argument list.",
$3->u.sval.u.string);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
01e7e5 | 2008-01-03 | Henrik Grubbström (Grubba) | | i = add_local_name($3->u.sval.u.string, compiler_pop_type(),0);
|
ceb95a | 2008-06-26 | Henrik Grubbström (Grubba) | | if (i >= 0) {
/* Don't warn about unused arguments. */
|
01e7e5 | 2008-01-03 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[i].flags |= LOCAL_VAR_IS_USED;
}
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($3);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
bb213c | 1999-12-27 | Henrik Grubbström (Grubba) | | func_args: '(' arguments close_paren_or_missing
{
free_node($3);
$$=$2;
}
;
|
febbc8 | 1997-04-22 | Fredrik Hübinette (Hubbe) | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | arguments: /* empty */ optional_comma { $$=0; }
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | arguments2 optional_comma
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
arguments2: new_arg_name { $$ = 1; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | arguments2 ',' new_arg_name { $$ = $1 + 1; }
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | | arguments2 ':' new_arg_name
{
yyerror("Unexpected ':' in argument list.");
$$ = $1 + 1;
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | modifier:
|
0c0b58 | 2008-06-29 | Martin Nilsson | | TOK_NO_MASK
{
$$ = ID_FINAL | ID_INLINE;
if( !(THIS_COMPILATION->lex.pragmas & ID_NO_DEPRECATION_WARNINGS) &&
!TEST_COMPAT(7, 6) && Pike_compiler->compiler_pass==1 )
yywarning("Keyword nomask is deprecated in favor for 'final'.");
}
|
e97e67 | 2007-12-28 | Henrik Grubbström (Grubba) | | | TOK_FINAL_ID { $$ = ID_FINAL | ID_INLINE; }
|
95489a | 2008-06-29 | Martin Nilsson | | | TOK_STATIC { $$ = ID_PROTECTED; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_EXTERN { $$ = ID_EXTERN; }
| TOK_OPTIONAL { $$ = ID_OPTIONAL; }
|
d41172 | 2008-07-14 | Henrik Grubbström (Grubba) | | | TOK_PRIVATE { $$ = ID_PRIVATE | ID_PROTECTED; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LOCAL_ID { $$ = ID_INLINE; }
| TOK_PUBLIC { $$ = ID_PUBLIC; }
| TOK_PROTECTED { $$ = ID_PROTECTED; }
| TOK_INLINE { $$ = ID_INLINE; }
|
8f733e | 2000-07-12 | Henrik Grubbström (Grubba) | | | TOK_VARIANT { $$ = ID_VARIANT; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | magic_identifiers1:
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | TOK_NO_MASK { $$ = "nomask"; }
| TOK_FINAL_ID { $$ = "final"; }
| TOK_STATIC { $$ = "static"; }
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | | TOK_EXTERN { $$ = "extern"; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PRIVATE { $$ = "private"; }
| TOK_LOCAL_ID { $$ = "local"; }
| TOK_PUBLIC { $$ = "public"; }
| TOK_PROTECTED { $$ = "protected"; }
| TOK_INLINE { $$ = "inline"; }
| TOK_OPTIONAL { $$ = "optional"; }
|
8f733e | 2000-07-12 | Henrik Grubbström (Grubba) | | | TOK_VARIANT { $$ = "variant"; }
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | ;
magic_identifiers2:
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | TOK_VOID_ID { $$ = "void"; }
| TOK_MIXED_ID { $$ = "mixed"; }
| TOK_ARRAY_ID { $$ = "array"; }
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | | TOK_ATTRIBUTE_ID { $$ = "__attribute__"; }
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | | TOK_DEPRECATED_ID { $$ = "__deprecated__"; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_MAPPING_ID { $$ = "mapping"; }
| TOK_MULTISET_ID { $$ = "multiset"; }
| TOK_OBJECT_ID { $$ = "object"; }
| TOK_FUNCTION_ID { $$ = "function"; }
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | | TOK_FUNCTION_NAME { $$ = "__func__"; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PROGRAM_ID { $$ = "program"; }
| TOK_STRING_ID { $$ = "string"; }
| TOK_FLOAT_ID { $$ = "float"; }
| TOK_INT_ID { $$ = "int"; }
|
76e7f9 | 2001-03-18 | Henrik Grubbström (Grubba) | | | TOK_ENUM { $$ = "enum"; }
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | | TOK_TYPEDEF { $$ = "typedef"; }
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | ;
magic_identifiers3:
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | TOK_IF { $$ = "if"; }
| TOK_DO { $$ = "do"; }
| TOK_FOR { $$ = "for"; }
| TOK_WHILE { $$ = "while"; }
| TOK_ELSE { $$ = "else"; }
| TOK_FOREACH { $$ = "foreach"; }
| TOK_CATCH { $$ = "catch"; }
| TOK_GAUGE { $$ = "gauge"; }
| TOK_CLASS { $$ = "class"; }
| TOK_BREAK { $$ = "break"; }
| TOK_CASE { $$ = "case"; }
| TOK_CONSTANT { $$ = "constant"; }
| TOK_CONTINUE { $$ = "continue"; }
| TOK_DEFAULT { $$ = "default"; }
|
528fe1 | 2004-10-23 | Martin Nilsson | | | TOK_FACET { $$ = "facet"; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IMPORT { $$ = "import"; }
| TOK_INHERIT { $$ = "inherit"; }
| TOK_LAMBDA { $$ = "lambda"; }
| TOK_PREDEF { $$ = "predef"; }
| TOK_RETURN { $$ = "return"; }
| TOK_SSCANF { $$ = "sscanf"; }
| TOK_SWITCH { $$ = "switch"; }
| TOK_TYPEOF { $$ = "typeof"; }
|
1977e2 | 2002-08-18 | Martin Stjernholm | | | TOK_GLOBAL { $$ = "global"; }
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | ;
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | magic_identifiers: magic_identifiers1 | magic_identifiers2 | magic_identifiers3 ;
|
32bc32 | 2008-06-18 | Henrik Grubbström (Grubba) | | magic_identifier: TOK_IDENTIFIER | TOK_RESERVED
|
21b2c9 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | | magic_identifiers
|
315aa8 | 1999-12-17 | Fredrik Hübinette (Hubbe) | | {
struct pike_string *tmp=make_shared_string($1);
$$=mkstrnode(tmp);
free_string(tmp);
}
;
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | modifiers: modifier_list
{
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | $$=Pike_compiler->current_modifiers=$1 |
(THIS_COMPILATION->lex.pragmas & ID_MODIFIER_MASK);
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
modifier_list: /* empty */ { $$ = 0; }
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | | modifier_list modifier { $$ = $1 | $2; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | attribute: TOK_ATTRIBUTE_ID '(' string_constant optional_comma ')'
{
$$ = $3;
}
| TOK_DEPRECATED_ID '(' ')'
{
struct pike_string *deprecated_string;
MAKE_CONST_STRING(deprecated_string, "deprecated");
$$ = mkstrnode(deprecated_string);
}
| TOK_DEPRECATED_ID
{
struct pike_string *deprecated_string;
MAKE_CONST_STRING(deprecated_string, "deprecated");
$$ = mkstrnode(deprecated_string);
}
;
optional_attributes: /* empty */ { $$ = 0; }
| optional_attributes attribute { $$ = mknode(F_ARG_LIST, $1, $2); }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | optional_stars: optional_stars '*' { $$=$1 + 1; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | /* empty */ { $$=0; }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
10fe60 | 2003-10-01 | Martin Stjernholm | | cast: open_paren_with_line_info type ')'
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s = compiler_pop_type();
$$ = mktypenode(s);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | }
|
2e4e45 | 1997-02-13 | Fredrik Hübinette (Hubbe) | | ;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | |
|
10fe60 | 2003-10-01 | Martin Stjernholm | | soft_cast: open_bracket_with_line_info type ']'
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s = compiler_pop_type();
$$ = mktypenode(s);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | }
;
|
0ebfc8 | 2001-04-01 | Henrik Grubbström (Grubba) | | full_type: type4
|
a6062c | 2001-04-01 | Henrik Grubbström (Grubba) | | | full_type '*'
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | {
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2 && !TEST_COMPAT (0, 6)) {
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
push_type(T_ARRAY);
}
;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | type6: type | identifier_type ;
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | type: type '*'
{
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2 && !TEST_COMPAT (0, 6)) {
|
67abdc | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | push_type(T_ARRAY);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | type2
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | type7: type7 '*'
{
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2 && !TEST_COMPAT (0, 6)) {
|
67abdc | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | push_type(T_ARRAY);
}
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | | type4
;
simple_type: type4
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s = compiler_pop_type();
$$ = mktypenode(s);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | if ($$->u.sval.u.type != s) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("mktypenode(%p) created node with %p\n", s, $$->u.sval.u.type);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | }
#endif /* PIKE_DEBUG */
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | }
;
simple_type2: type2
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s = compiler_pop_type();
$$ = mktypenode(s);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | if ($$->u.sval.u.type != s) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("mktypenode(%p) created node with %p\n", s, $$->u.sval.u.type);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | }
#endif /* PIKE_DEBUG */
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | }
;
simple_identifier_type: identifier_type
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *s = compiler_pop_type();
$$ = mktypenode(s);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | if ($$->u.sval.u.type != s) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("mktypenode(%p) created node with %p\n", s, $$->u.sval.u.type);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | }
#endif /* PIKE_DEBUG */
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(s);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
122021 | 2001-05-08 | Henrik Grubbström (Grubba) | | type4: type4 '|' type8 { push_type(T_OR); }
| type8
;
type2: type2 '|' type8 { push_type(T_OR); }
|
0ad650 | 2012-10-02 | Per Hedbor | | | basic_type
|
122021 | 2001-05-08 | Henrik Grubbström (Grubba) | | ;
type8: basic_type | identifier_type ;
basic_type:
TOK_FLOAT_ID { push_type(T_FLOAT); }
| TOK_VOID_ID { push_type(T_VOID); }
| TOK_MIXED_ID { push_type(T_MIXED); }
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | | | TOK_STRING_ID opt_string_width {}
|
122021 | 2001-05-08 | Henrik Grubbström (Grubba) | | | TOK_INT_ID opt_int_range {}
| TOK_MAPPING_ID opt_mapping_type {}
| TOK_FUNCTION_ID opt_function_type {}
| TOK_OBJECT_ID opt_object_type {}
| TOK_PROGRAM_ID opt_object_type { push_type(T_PROGRAM); }
| TOK_ARRAY_ID opt_array_type { push_type(T_ARRAY); }
| TOK_MULTISET_ID opt_array_type { push_type(T_MULTISET); }
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | | TOK_ATTRIBUTE_ID '(' string_constant ',' type7 ')'
{
push_type_attribute($3->u.sval.u.string);
free_node($3);
}
| TOK_ATTRIBUTE_ID '(' string_constant error ')'
{
push_type(T_MIXED);
push_type_attribute($3->u.sval.u.string);
free_node($3);
}
| TOK_ATTRIBUTE_ID error
{
push_type(T_MIXED);
}
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | | TOK_DEPRECATED_ID '(' type7 ')'
{
struct pike_string *deprecated_string;
MAKE_CONST_STRING(deprecated_string, "deprecated");
push_type_attribute(deprecated_string);
}
| TOK_DEPRECATED_ID '(' error ')'
{
struct pike_string *deprecated_string;
MAKE_CONST_STRING(deprecated_string, "deprecated");
push_type(T_MIXED);
push_type_attribute(deprecated_string);
}
|
122021 | 2001-05-08 | Henrik Grubbström (Grubba) | | ;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | identifier_type: idents
|
0ad650 | 2012-10-02 | Per Hedbor | | {
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | resolv_constant($1);
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) == T_TYPE) {
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | /* "typedef" */
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_finished_type(Pike_sp[-1].u.type);
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | } else {
/* object type */
struct program *p = NULL;
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-1]) == T_OBJECT) {
|
f54c78 | 2004-12-22 | Henrik Grubbström (Grubba) | | if(!(p = Pike_sp[-1].u.object->prog))
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | {
pop_stack();
push_int(0);
yyerror("Destructed object used as program identifier.");
}else{
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | int f = FIND_LFUN(p->inherits[SUBTYPEOF(Pike_sp[-1])].prog,
LFUN_CALL);
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | if(f!=-1)
{
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | SET_SVAL_SUBTYPE(Pike_sp[-1],
f + p->inherits[SUBTYPEOF(Pike_sp[-1])].
identifier_level);
SET_SVAL_TYPE(Pike_sp[-1], T_FUNCTION);
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | }else{
|
3a77fb | 2003-02-26 | Henrik Grubbström (Grubba) | | extern void f_object_program(INT32);
|
e2091d | 2004-08-16 | Martin Stjernholm | | if (Pike_compiler->compiler_pass == 2 && !TEST_COMPAT (7, 4)) {
|
1a19e4 | 2003-01-13 | Henrik Grubbström (Grubba) | | yywarning("Using object as program identifier.");
}
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | f_object_program(1);
}
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | }
}
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | switch(TYPEOF(Pike_sp[-1])) {
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | case T_FUNCTION:
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | if((p = program_from_function(Pike_sp-1))) {
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | push_object_type(0, p?(p->id):0);
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | break;
} else {
/* Attempt to get the return type for the function. */
struct pike_type *a, *b;
a = get_type_of_svalue(Pike_sp-1);
/* Note: check_splice_call() below eats a reference from a.
* Note: CALL_INHIBIT_WARNINGS is needed since we don't
* provide a function name (and we don't want
* warnings here anyway).
*/
a = check_splice_call(NULL, a, 0, mixed_type_string, NULL,
CALL_INHIBIT_WARNINGS);
if (a) {
b = new_get_return_type(a, 0);
free_type(a);
if (b) {
push_finished_type(b);
free_type(b);
break;
}
}
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | }
|
113925 | 2010-05-29 | Henrik Grubbström (Grubba) | | /* FALL_THROUGH */
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | default:
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (Pike_compiler->compiler_pass!=1)
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Illegal program identifier: %O.", Pike_sp-1);
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | pop_stack();
push_int(0);
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | push_object_type(0, 0);
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | break;
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | case T_PROGRAM:
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | p = Pike_sp[-1].u.program;
|
ef08eb | 2001-05-13 | Fredrik Hübinette (Hubbe) | | push_object_type(0, p?(p->id):0);
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | break;
}
}
|
f62c41 | 2001-03-05 | Henrik Grubbström (Grubba) | | /* Attempt to name the type. */
if (Pike_compiler->last_identifier) {
push_type_name(Pike_compiler->last_identifier);
}
|
7a08f3 | 2000-01-25 | Henrik Grubbström (Grubba) | | pop_stack();
free_node($1);
}
;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | |
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | number_or_maxint: /* Empty */
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | $$ = mkintnode(MAX_INT_TYPE);
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_NUMBER
| '-' TOK_NUMBER
|
3dc856 | 1999-12-30 | Henrik Grubbström (Grubba) | | {
#ifdef PIKE_DEBUG
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (($2->token != F_CONSTANT) || (TYPEOF($2->u.sval) != T_INT)) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Unexpected number in negative int-range.\n");
|
3dc856 | 1999-12-30 | Henrik Grubbström (Grubba) | | }
#endif /* PIKE_DEBUG */
$$ = mkintnode(-($2->u.sval.u.integer));
free_node($2);
}
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | ;
number_or_minint: /* Empty */
{
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | $$ = mkintnode(MIN_INT_TYPE);
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_NUMBER
| '-' TOK_NUMBER
|
3dc856 | 1999-12-30 | Henrik Grubbström (Grubba) | | {
#ifdef PIKE_DEBUG
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (($2->token != F_CONSTANT) || (TYPEOF($2->u.sval) != T_INT)) {
|
5aad93 | 2002-08-15 | Marcus Comstedt | | Pike_fatal("Unexpected number in negative int-range.\n");
|
3dc856 | 1999-12-30 | Henrik Grubbström (Grubba) | | }
#endif /* PIKE_DEBUG */
$$ = mkintnode(-($2->u.sval.u.integer));
free_node($2);
}
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | ;
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | expected_dot_dot: TOK_DOT_DOT
| TOK_DOT_DOT_DOT
{
yyerror("Elipsis ('...') where range indicator ('..') expected.");
}
;
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | opt_int_range: /* Empty */
{
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | push_int_type(MIN_INT_TYPE, MAX_INT_TYPE);
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | }
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | | '(' number_or_minint expected_dot_dot number_or_maxint ')'
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | {
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | INT_TYPE min = MIN_INT_TYPE;
INT_TYPE max = MAX_INT_TYPE;
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | |
|
f5fd53 | 1999-03-29 | Henrik Grubbström (Grubba) | | /* FIXME: Check that $4 is >= $2. */
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | if($4->token == F_CONSTANT) {
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF($4->u.sval) == T_INT) {
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | max = $4->u.sval.u.integer;
#ifdef AUTO_BIGNUM
} else if (is_bignum_object_in_svalue(&$4->u.sval)) {
push_int(0);
if (is_lt(&$4->u.sval, Pike_sp-1)) {
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | max = MIN_INT_TYPE;
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | }
pop_stack();
#endif /* AUTO_BIGNUM */
}
|
011ad3 | 1999-10-22 | Fredrik Hübinette (Hubbe) | | }
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | if($2->token == F_CONSTANT) {
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF($2->u.sval) == T_INT) {
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | min = $2->u.sval.u.integer;
#ifdef AUTO_BIGNUM
|
5cad76 | 2002-08-27 | Henrik Grubbström (Grubba) | | } else if (is_bignum_object_in_svalue(&$2->u.sval)) {
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | push_int(0);
|
5cad76 | 2002-08-27 | Henrik Grubbström (Grubba) | | if (is_lt(Pike_sp-1, &$2->u.sval)) {
|
69aa4b | 2003-01-26 | Mirar (Pontus Hagland) | | min = MAX_INT_TYPE;
|
96c393 | 2002-08-27 | Henrik Grubbström (Grubba) | | }
pop_stack();
#endif /* AUTO_BIGNUM */
}
|
011ad3 | 1999-10-22 | Fredrik Hübinette (Hubbe) | | }
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_int_type(min, max);
|
011ad3 | 1999-10-22 | Fredrik Hübinette (Hubbe) | | free_node($2);
free_node($4);
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
4e6c08 | 2007-05-02 | Henrik Grubbström (Grubba) | | | '(' error ')'
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | | {
|
4e6c08 | 2007-05-02 | Henrik Grubbström (Grubba) | | push_int_type(MIN_INT32, MAX_INT32);
yyerror("Expected integer range.");
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | | }
|
4e6c08 | 2007-05-02 | Henrik Grubbström (Grubba) | | ;
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | |
|
4e6c08 | 2007-05-02 | Henrik Grubbström (Grubba) | | opt_string_width: opt_int_range
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | | {
|
4e6c08 | 2007-05-02 | Henrik Grubbström (Grubba) | | push_type(T_STRING);
|
157fc6 | 2007-03-03 | Henrik Grubbström (Grubba) | | }
;
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | | opt_object_type: /* Empty */ { push_object_type(0, 0); }
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | | {
#ifdef PIKE_DEBUG
$<ptr>$ = Pike_sp;
#endif /* PIKE_DEBUG */
}
'(' program_ref ')'
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
|
66c236 | 1998-08-29 | Henrik Grubbström (Grubba) | | /* NOTE: On entry, there are two items on the stack:
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | * Pike_sp-2: Name of the program reference (string).
* Pike_sp-1: The resolved program (program|function|zero).
|
66c236 | 1998-08-29 | Henrik Grubbström (Grubba) | | */
|
f07758 | 2000-07-06 | Fredrik Hübinette (Hubbe) | | struct program *p=program_from_svalue(Pike_sp-1);
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | |
|
a99357 | 2002-10-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if ($<ptr>1 != (Pike_sp - 2)) {
Pike_fatal("Unexpected stack depth: %p != %p\n",
$<n>1, Pike_sp-2);
}
#endif /* PIKE_DEBUG */
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | | if(!p) {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (Pike_compiler->compiler_pass!=1) {
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Not a valid program specifier: %S", Pike_sp[-2].u.string);
|
66c236 | 1998-08-29 | Henrik Grubbström (Grubba) | | }
|
1532e6 | 1996-11-16 | Fredrik Hübinette (Hubbe) | | }
|
361142 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_object_type(0, p?(p->id):0);
|
f62c41 | 2001-03-05 | Henrik Grubbström (Grubba) | | /* Attempt to name the type. */
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(Pike_sp[-2]) == T_STRING) {
|
f62c41 | 2001-03-05 | Henrik Grubbström (Grubba) | | push_type_name(Pike_sp[-2].u.string);
}
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | pop_n_elems(2);
}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | opt_function_type: '('
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
type_stack_mark();
}
function_type_list optional_dot_dot_dot ':'
{
|
0aa4ba | 2001-02-25 | Henrik Grubbström (Grubba) | | /* Add the many type if there is none. */
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | if ($4)
{
|
0aa4ba | 2001-02-25 | Henrik Grubbström (Grubba) | | if (!$3) {
|
7e71da | 2000-03-30 | Henrik Grubbström (Grubba) | | /* function_type_list ends with a comma, or is empty.
* FIXME: Should this be a syntax error or not?
*/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (Pike_compiler->compiler_pass == 1) {
|
6deabd | 2000-03-30 | Henrik Grubbström (Grubba) | | yyerror("Missing type before ... .");
|
85fb3d | 2000-03-30 | Henrik Grubbström (Grubba) | | }
|
7e71da | 2000-03-30 | Henrik Grubbström (Grubba) | | push_type(T_MIXED);
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }else{
push_type(T_VOID);
}
}
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | type7 ')'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
92aeb1 | 2001-02-26 | Henrik Grubbström (Grubba) | | push_reverse_type(T_MANY);
Pike_compiler->pike_type_mark_stackp--;
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | while (*Pike_compiler->pike_type_mark_stackp+1 <
|
92aeb1 | 2001-02-26 | Henrik Grubbström (Grubba) | | Pike_compiler->type_stackp) {
push_reverse_type(T_FUNCTION);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
| /* empty */
{
push_type(T_MIXED);
|
327c05 | 1999-11-24 | Fredrik Hübinette (Hubbe) | | push_type(T_VOID);
push_type(T_OR);
|
2401c7 | 2000-01-03 | Martin Stjernholm | | push_type(T_ZERO);
|
327c05 | 1999-11-24 | Fredrik Hübinette (Hubbe) | | push_type(T_VOID);
push_type(T_OR);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | push_type(T_MANY);
}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | function_type_list: /* Empty */ optional_comma { $$=0; }
| function_type_list2 optional_comma { $$=!$2; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | function_type_list2: type7 { $$=1; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | function_type_list2 ','
{
}
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | type7
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | opt_array_type: '(' type7 ')'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | { push_type(T_MIXED); }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
opt_mapping_type: '('
|
0ad650 | 2012-10-02 | Per Hedbor | | {
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | type7 ':'
|
0ad650 | 2012-10-02 | Per Hedbor | | {
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | type7
|
0ad650 | 2012-10-02 | Per Hedbor | | {
|
92aeb1 | 2001-02-26 | Henrik Grubbström (Grubba) | | push_reverse_type(T_MAPPING);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
')'
|
0ad650 | 2012-10-02 | Per Hedbor | | | /* empty */
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
push_type(T_MIXED);
push_type(T_MIXED);
|
92aeb1 | 2001-02-26 | Henrik Grubbström (Grubba) | | push_type(T_MAPPING);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
name_list: new_name
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | name_list ',' new_name
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | new_name: optional_stars TOK_IDENTIFIER
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($1 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | while($1--) push_type(T_ARRAY);
|
4142a6 | 1998-05-19 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
|
019b3d | 2000-07-09 | Henrik Grubbström (Grubba) | | define_variable($2->u.sval.u.string, type,
Pike_compiler->current_modifiers);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(type);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | optional_stars bad_identifier {}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER '='
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($1 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | while($1--) push_type(T_ARRAY);
|
4142a6 | 1998-05-19 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
|
019b3d | 2000-07-09 | Henrik Grubbström (Grubba) | | if ((Pike_compiler->current_modifiers & ID_EXTERN) &&
(Pike_compiler->compiler_pass == 1)) {
|
8fd931 | 1999-12-30 | Henrik Grubbström (Grubba) | | yywarning("Extern declared variable has initializer.");
}
$<number>$=define_variable($2->u.sval.u.string, type,
|
019b3d | 2000-07-09 | Henrik Grubbström (Grubba) | | Pike_compiler->current_modifiers & (~ID_EXTERN));
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(type);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
expr0
{
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->init_node=mknode(F_COMMA_EXPR,Pike_compiler->init_node,
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | mkcastnode(void_type_string,
mknode(F_ASSIGN,$5,
mkidentifiernode($<number>4))));
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER '=' error
|
296836 | 1998-04-14 | Henrik Grubbström (Grubba) | | {
free_node($2);
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER '=' TOK_LEX_EOF
|
e67c86 | 1998-08-01 | Henrik Grubbström (Grubba) | | {
yyerror("Unexpected end of file in variable definition.");
free_node($2);
}
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | optional_stars bad_identifier '=' expr0
{
free_node($4);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | new_local_name: optional_stars TOK_IDENTIFIER
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | {
int id;
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_finished_type($<n>0->u.sval.u.type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($1 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | while($1--) push_type(T_ARRAY);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | id = add_local_name($2->u.sval.u.string, compiler_pop_type(),0);
|
c98166 | 2006-03-02 | Henrik Grubbström (Grubba) | | if (id >= 0) {
/* FIXME: Consider using mklocalnode(id, -1). */
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$=mknode(F_ASSIGN,mkintnode(0),mklocalnode(id,0));
|
c98166 | 2006-03-02 | Henrik Grubbström (Grubba) | | } else
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$ = 0;
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
5b6acd | 1998-04-30 | Fredrik Hübinette (Hubbe) | | | optional_stars bad_identifier { $$=0; }
|
0ad650 | 2012-10-02 | Per Hedbor | | | optional_stars TOK_IDENTIFIER '=' expr0
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | int id;
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_finished_type($<n>0->u.sval.u.type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($1 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | while($1--) push_type(T_ARRAY);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | id = add_local_name($2->u.sval.u.string, compiler_pop_type(),0);
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | if (id >= 0) {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | if (!(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES)) {
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | /* Only warn about unused initialized variables in strict types mode. */
Pike_compiler->compiler_frame->variable[id].flags |= LOCAL_VAR_IS_USED;
}
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$=mknode(F_ASSIGN,$4,mklocalnode(id,0));
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | } else
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$ = 0;
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | optional_stars bad_identifier '=' expr0
{
free_node($4);
|
5b6acd | 1998-04-30 | Fredrik Hübinette (Hubbe) | | $$=0;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER '=' error
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
free_node($2);
/* No yyerok here since we aren't done yet. */
|
5b6acd | 1998-04-30 | Fredrik Hübinette (Hubbe) | | $$=0;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER '=' TOK_LEX_EOF
|
e67c86 | 1998-08-01 | Henrik Grubbström (Grubba) | | {
yyerror("Unexpected end of file in local variable definition.");
free_node($2);
/* No yyerok here since we aren't done yet. */
$$=0;
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | new_local_name2: TOK_IDENTIFIER
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | {
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | int id;
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | add_ref($<n>0->u.sval.u.type);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | id = add_local_name($1->u.sval.u.string, $<n>0->u.sval.u.type, 0);
|
c98166 | 2006-03-02 | Henrik Grubbström (Grubba) | | if (id >= 0) {
/* FIXME: Consider using mklocalnode(id, -1). */
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$=mknode(F_ASSIGN,mkintnode(0),mklocalnode(id,0));
|
c98166 | 2006-03-02 | Henrik Grubbström (Grubba) | | } else
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$ = 0;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | free_node($1);
}
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | | bad_identifier { $$=0; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IDENTIFIER '=' safe_expr0
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | {
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | int id;
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | add_ref($<n>0->u.sval.u.type);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | id = add_local_name($1->u.sval.u.string, $<n>0->u.sval.u.type, 0);
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | if (id >= 0) {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | if (!(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES)) {
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | /* Only warn about unused initialized variables in strict types mode. */
Pike_compiler->compiler_frame->variable[id].flags |= LOCAL_VAR_IS_USED;
}
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$=mknode(F_ASSIGN,$3, mklocalnode(id,0));
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | } else
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | $$ = 0;
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | free_node($1);
}
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | | bad_identifier '=' safe_expr0 { $$=$3; }
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | ;
|
9b3902 | 2003-03-27 | Martin Stjernholm | | line_number_info: /* empty */
{
/* Used to hold line-number info */
$$ = mkintnode(0);
}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | block:'{'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>1=Pike_compiler->num_used_modules;
$<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
0ad650 | 2012-10-02 | Per Hedbor | | }
|
9b3902 | 2003-03-27 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | |
if($<number>$ == -1) /* if 'first block' */
Pike_compiler->compiler_frame->last_block_level=0; /* all variables */
else
Pike_compiler->compiler_frame->last_block_level=$<number>2;
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | }
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | statements end_block
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | unuse_modules(Pike_compiler->num_used_modules - $<number>1);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
291742 | 2004-08-25 | Henrik Grubbström (Grubba) | | if ($5) COPY_LINE_NUMBER_INFO($5, $3);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($3);
$$=$5;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
eb9ef9 | 2010-11-19 | Henrik Grubbström (Grubba) | | /* Node with line number info at $0. */
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | end_block: '}'
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing '}'.");
|
eb9ef9 | 2010-11-19 | Henrik Grubbström (Grubba) | | if ($<n>0) {
low_yyreport(REPORT_ERROR, $<n>0->current_file, $<n>0->line_number,
parser_system_string, 0, "Opening '{' was here.");
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
;
|
01d3e2 | 1997-04-23 | Fredrik Hübinette (Hubbe) | | failsafe_block: block
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | | error { $$=0; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF { yyerror("Unexpected end of file."); $$=0; }
|
01d3e2 | 1997-04-23 | Fredrik Hübinette (Hubbe) | | ;
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | |
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | /* Type at $-2 */
propagated_type:
{
$$ = $<n>-2;
}
;
|
01d3e2 | 1997-04-23 | Fredrik Hübinette (Hubbe) | |
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | /* Type at $0 */
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | local_name_list: new_local_name
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | | local_name_list ',' propagated_type new_local_name
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | { $$ = mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $1), $4); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | /* Type at $0 */
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | local_name_list2: new_local_name2
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | | local_name_list2 ',' propagated_type new_local_name
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | { $$ = mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $1), $4); }
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | ;
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | |
local_constant_name: TOK_IDENTIFIER '=' safe_expr0
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | |
/* Ugly hack to make sure that $3 is optimized */
{
int tmp=Pike_compiler->compiler_pass;
$3=mknode(F_COMMA_EXPR,$3,0);
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | optimize_node($3);
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_pass=tmp;
type=$3->u.node.a->type;
}
if(!is_const($3))
{
if(Pike_compiler->compiler_pass==2)
yyerror("Constant definition is not constant.");
}else{
|
9f85c3 | 2002-10-25 | Marcus Comstedt | | ptrdiff_t tmp=eval_low($3,1);
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | if(tmp < 1)
{
yyerror("Error in constant definition.");
}else{
pop_n_elems(DO_NOT_WARN((INT32)(tmp - 1)));
if($3) free_node($3);
$3=mksvaluenode(Pike_sp-1);
type=$3->type;
pop_stack();
}
}
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | if(!type) type = mixed_type_string;
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | add_ref(type);
|
107a0a | 2001-01-16 | Fredrik Hübinette (Hubbe) | | low_add_local_name(Pike_compiler->compiler_frame, /*->previous,*/
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | $1->u.sval.u.string,
type, $3);
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | /* Note: Intentionally not marked as used. */
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | free_node($1);
}
| bad_identifier '=' safe_expr0 { if ($3) free_node($3); }
| error '=' safe_expr0 { if ($3) free_node($3); }
;
local_constant_list: local_constant_name
|
107029 | 2000-11-04 | Henrik Grubbström (Grubba) | | | local_constant_list ',' local_constant_name
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | ;
|
107029 | 2000-11-04 | Henrik Grubbström (Grubba) | | local_constant: TOK_CONSTANT local_constant_list ';'
| TOK_CONSTANT error ';' { yyerrok; }
| TOK_CONSTANT error TOK_LEX_EOF
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | {
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
|
107029 | 2000-11-04 | Henrik Grubbström (Grubba) | | | TOK_CONSTANT error '}' { yyerror("Missing ';'."); }
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | statements: { $$=0; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | statements statement
{
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | $$ = mknode(F_COMMA_EXPR, $1, mkcastnode(void_type_string, $2));
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
24af19 | 2005-02-18 | Henrik Grubbström (Grubba) | | statement_with_semicolon: unused2 expected_semicolon ;
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | |
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | normal_label_statement: statement_with_semicolon
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | import { $$=0; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | cond
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | | return
|
f5df59 | 2000-10-25 | Fredrik Hübinette (Hubbe) | | | local_constant { $$=0; }
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | block
|
586b8a | 1998-04-28 | Henrik Grubbström (Grubba) | | | break expected_semicolon
| continue expected_semicolon
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | | | error ';' { reset_type_stack(); $$=0; yyerrok; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
reset_type_stack();
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
$$=0;
}
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | | error '}'
{
reset_type_stack();
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | yyerror("Missing ';'.");
|
eb5c90 | 1998-04-19 | Fredrik Hübinette (Hubbe) | | /* yychar = '}'; */ /* Put the '}' back on the input stream. */
$$=0;
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | }
|
0ad650 | 2012-10-02 | Per Hedbor | | | ';' { $$=0; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | statement: normal_label_statement
{
Pike_compiler->compiler_frame->opt_flags &= ~OPT_CUSTOM_LABELS;
}
| while
| do
| for
| foreach
| switch
| case
| default
| labeled_statement
;
labeled_statement: TOK_IDENTIFIER
{
Pike_compiler->compiler_frame->opt_flags &= ~OPT_CUSTOM_LABELS;
}
':' statement
{
$$ = mknode(Pike_compiler->compiler_frame->opt_flags & OPT_CUSTOM_LABELS ?
F_CUSTOM_STMT_LABEL : F_NORMAL_STMT_LABEL,
$1, $4);
/* FIXME: This won't be correct if the node happens to be shared.
* That's an issue to be solved with shared nodes in general,
* though. */
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | }
;
optional_label: TOK_IDENTIFIER
| /* empty */ {$$ = 0;}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | break: TOK_BREAK optional_label { $$=mknode(F_BREAK,$2,0); } ;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | default: TOK_DEFAULT ':' { $$=mknode(F_DEFAULT,0,0); }
| TOK_DEFAULT
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | {
$$=mknode(F_DEFAULT,0,0); yyerror("Expected ':' after default.");
}
;
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | continue: TOK_CONTINUE optional_label { $$=mknode(F_CONTINUE,$2,0); } ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | push_compiler_frame1: /* empty */
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
8322b6 | 2000-05-08 | Fredrik Hübinette (Hubbe) | | push_compiler_frame(SCOPE_LOCAL);
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | |
$$ = Pike_compiler->compiler_frame;
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | }
;
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | implicit_identifier: /* empty */
{
|
247987 | 2008-05-07 | Henrik Grubbström (Grubba) | | struct pike_string *name;
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | $$=mkstrnode(name = get_new_name(NULL));
|
247987 | 2008-05-07 | Henrik Grubbström (Grubba) | | free_string(name);
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | }
;
lambda: TOK_LAMBDA line_number_info implicit_identifier push_compiler_frame1
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(Pike_compiler->compiler_frame->current_return_type);
if(Pike_compiler->compiler_frame->current_return_type)
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(Pike_compiler->compiler_frame->current_return_type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_return_type,
any_type_string);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | func_args
{
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | struct pike_string *name = $3->u.sval.u.string;
struct pike_type *type;
int e;
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | $<number>$ = Pike_compiler->varargs;
Pike_compiler->varargs = 0;
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | |
|
907256 | 2008-05-07 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 1) {
/* Define a tentative prototype for the lambda. */
push_finished_type(mixed_type_string);
e=$6-1;
if($<number>$)
{
push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
e--;
pop_type_stack(T_ARRAY);
}else{
push_type(T_VOID);
}
Pike_compiler->varargs=0;
push_type(T_MANY);
for(; e>=0; e--) {
push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
push_type(T_FUNCTION);
|
0ad650 | 2012-10-02 | Per Hedbor | | }
|
907256 | 2008-05-07 | Henrik Grubbström (Grubba) | | type=compiler_pop_type();
Pike_compiler->compiler_frame->current_function_number =
define_function(name, type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_PROTECTED | ID_PRIVATE | ID_INLINE | ID_USED,
|
907256 | 2008-05-07 | Henrik Grubbström (Grubba) | | IDENTIFIER_PIKE_FUNCTION, NULL,
(unsigned INT16)
(Pike_compiler->compiler_frame->opt_flags));
free_type(type);
} else {
/* In pass 2 we just reuse the type from pass 1. */
Pike_compiler->compiler_frame->current_function_number =
isidentifier(name);
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | }
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | }
failsafe_block
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
329cc0 | 1997-02-17 | Fredrik Hübinette (Hubbe) | | int f,e;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | struct pike_string *name;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
struct pike_string *save_file = c->lex.current_file;
int save_line = c->lex.current_line;
c->lex.current_file = $2->current_file;
c->lex.current_line = $2->line_number;
|
d4f23b | 2001-08-10 | Martin Stjernholm | |
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | debug_malloc_touch($8);
$8=mknode(F_COMMA_EXPR,$8,mknode(F_RETURN,mkintnode(0),0));
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
|
cbdf33 | 2003-03-27 | Martin Stjernholm | | /* Doing this in pass 1 might induce too strict checks on types
* in cases where we got placeholders. */
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | type=find_return_type($8);
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | if (type) {
push_finished_type(type);
free_type(type);
} else {
yywarning("Failed to determine return type for lambda.");
push_type(T_ZERO);
}
} else {
/* Tentative return type. */
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | | push_type(T_MIXED);
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | }
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | e=$6-1;
if($<number>7)
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | e--;
|
5b368e | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_type_stack(T_ARRAY);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }else{
push_type(T_VOID);
}
|
903970 | 2000-08-15 | Henrik Grubbström (Grubba) | | Pike_compiler->varargs=0;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | push_type(T_MANY);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | for(; e>=0; e--) {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | push_type(T_FUNCTION);
}
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
4142a6 | 1998-05-19 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | name = $3->u.sval.u.string;
|
c4d468 | 1998-06-06 | Henrik Grubbström (Grubba) | |
#ifdef LAMBDA_DEBUG
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | fprintf(stderr, "%d: LAMBDA: %s 0x%08lx 0x%08lx\n%d: type: ",
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, name->str,
(long)Pike_compiler->new_program->id,
Pike_compiler->local_class_counter-1,
Pike_compiler->compiler_pass);
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | simple_describe_type(type);
fprintf(stderr, "\n");
|
c4d468 | 1998-06-06 | Henrik Grubbström (Grubba) | | #endif /* LAMBDA_DEBUG */
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | |
|
8267f4 | 1998-01-28 | Fredrik Hübinette (Hubbe) | | f=dooptcode(name,
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | $8,
|
8267f4 | 1998-01-28 | Fredrik Hübinette (Hubbe) | | type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_PROTECTED | ID_PRIVATE | ID_INLINE | ID_USED);
|
22edc2 | 1998-01-29 | Fredrik Hübinette (Hubbe) | |
|
907256 | 2008-05-07 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (f != Pike_compiler->compiler_frame->current_function_number) {
Pike_fatal("Lost track of lambda %s.\n", name->str);
}
#endif /* PIKE_DEBUG */
|
164d6b | 2001-11-29 | Henrik Grubbström (Grubba) | | #ifdef LAMBDA_DEBUG
fprintf(stderr, "%d: lexical_scope: 0x%08x\n",
Pike_compiler->compiler_pass,
Pike_compiler->compiler_frame->lexical_scope);
#endif /* LAMBDA_DEBUG */
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED) {
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | $$ = mktrampolinenode(f, Pike_compiler->compiler_frame->previous);
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | } else {
$$ = mkidentifiernode(f);
}
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(type);
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = save_line;
c->lex.current_file = save_file;
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | free_node($3);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($2);
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $4) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $4,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_compiler_frame();
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | | TOK_LAMBDA line_number_info implicit_identifier push_compiler_frame1 error
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | {
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $4) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $4,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | pop_compiler_frame();
|
3857bd | 2000-11-04 | Henrik Grubbström (Grubba) | | $$ = mkintnode(0);
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | free_node($3);
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | | free_node($2);
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
0ad650 | 2012-10-02 | Per Hedbor | | local_function: TOK_IDENTIFIER push_compiler_frame1 func_args
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *name;
struct pike_type *type;
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | int id,e;
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | node *n;
struct identifier *i=0;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(Pike_compiler->compiler_frame->current_return_type);
if(Pike_compiler->compiler_frame->current_return_type)
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(Pike_compiler->compiler_frame->current_return_type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_return_type,
$<n>0->u.sval.u.type);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | /***/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_return_type);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | e=$3-1;
|
c3cfe9 | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->varargs)
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | e--;
|
5b368e | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_type_stack(T_ARRAY);
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | }else{
push_type(T_VOID);
}
push_type(T_MANY);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | for(; e>=0; e--) {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | push_type(T_FUNCTION);
}
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | /***/
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | name = get_new_name($1->u.sval.u.string);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | |
#ifdef LAMBDA_DEBUG
fprintf(stderr, "%d: LAMBDA: %s 0x%08lx 0x%08lx\n",
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, name->str,
(long)Pike_compiler->new_program->id,
Pike_compiler->local_class_counter-1);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | #endif /* LAMBDA_DEBUG */
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass > 1)
{
id=isidentifier(name);
}else{
id=define_function(name,
type,
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | ID_PROTECTED | ID_PRIVATE | ID_INLINE | ID_USED,
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | IDENTIFIER_PIKE_FUNCTION |
(Pike_compiler->varargs?IDENTIFIER_VARARGS:0),
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | 0,
OPT_SIDE_EFFECT|OPT_EXTERNAL_DEPEND);
}
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | Pike_compiler->varargs=0;
|
b1aa47 | 2001-10-05 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_frame->current_function_number=id;
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | n=0;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass > 1 &&
(i=ID_FROM_INT(Pike_compiler->new_program, id)))
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | {
if(i->identifier_flags & IDENTIFIER_SCOPED)
n = mktrampolinenode(id, Pike_compiler->compiler_frame->previous);
else
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | n = mkidentifiernode(id);
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | }
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | low_add_local_name(Pike_compiler->compiler_frame->previous,
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | $1->u.sval.u.string, type, n);
$<number>$=id;
free_string(name);
}
failsafe_block
{
int localid;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | struct identifier *i=ID_FROM_INT(Pike_compiler->new_program, $<number>4);
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
struct pike_string *save_file = c->lex.current_file;
int save_line = c->lex.current_line;
c->lex.current_file = $1->current_file;
c->lex.current_line = $1->line_number;
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | |
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $5=mknode(F_COMMA_EXPR,$5,mknode(F_RETURN,mkintnode(0),0));
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | debug_malloc_touch($5);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | dooptcode(i->name,
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $5,
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | i->type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_PROTECTED | ID_PRIVATE | ID_INLINE);
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
1ef557 | 2000-08-30 | Henrik Grubbström (Grubba) | | i->opt_flags = Pike_compiler->compiler_frame->opt_flags;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = save_line;
c->lex.current_file = save_file;
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $2) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $2,
Pike_compiler->compiler_frame->previous);
}
#endif
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | pop_compiler_frame();
free_node($1);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
/* WARNING: If the local function adds more variables we are screwed */
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | /* WARNING2: if add_local_name stops adding local variables at the end,
* this has to be fixed.
*/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | localid=Pike_compiler->compiler_frame->current_number_of_locals-1;
if(Pike_compiler->compiler_frame->variable[localid].def)
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $$=copy_node(Pike_compiler->compiler_frame->variable[localid].def);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | }else{
|
0ad650 | 2012-10-02 | Per Hedbor | | if(Pike_compiler->compiler_frame->lexical_scope &
|
b6cdf3 | 2000-06-28 | Fredrik Hübinette (Hubbe) | | (SCOPE_SCOPE_USED | SCOPE_SCOPED))
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | {
|
3a77fb | 2003-02-26 | Henrik Grubbström (Grubba) | | $$ = mktrampolinenode($<number>4,Pike_compiler->compiler_frame);
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | }else{
|
3a77fb | 2003-02-26 | Henrik Grubbström (Grubba) | | $$ = mkidentifiernode($<number>4);
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | }
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IDENTIFIER push_compiler_frame1 error
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | {
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $2) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $2,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | pop_compiler_frame();
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $$=mkintnode(0);
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | ;
|
0ad650 | 2012-10-02 | Per Hedbor | | local_function2: optional_stars TOK_IDENTIFIER push_compiler_frame1 func_args
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *name;
struct pike_type *type;
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | int id,e;
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | node *n;
struct identifier *i=0;
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | /***/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(Pike_compiler->compiler_frame->current_return_type);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | push_finished_type($<n>0->u.sval.u.type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($1 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
66f771 | 2000-02-17 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | while($1--) push_type(T_ARRAY);
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_frame->current_return_type)
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(Pike_compiler->compiler_frame->current_return_type);
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_frame->current_return_type=compiler_pop_type();
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | /***/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->current_return_type);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | e=$4-1;
|
c3cfe9 | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->varargs)
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | e--;
|
5b368e | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_type_stack(T_ARRAY);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | }else{
push_type(T_VOID);
}
push_type(T_MANY);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | for(; e>=0; e--) {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
|
dfed93 | 2001-03-03 | Henrik Grubbström (Grubba) | | push_type(T_FUNCTION);
}
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
/***/
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | name = get_new_name($2->u.sval.u.string);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
#ifdef LAMBDA_DEBUG
fprintf(stderr, "%d: LAMBDA: %s 0x%08lx 0x%08lx\n",
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, name->str,
(long)Pike_compiler->new_program->id,
Pike_compiler->local_class_counter-1);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | #endif /* LAMBDA_DEBUG */
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass > 1)
{
id=isidentifier(name);
}else{
id=define_function(name,
type,
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | ID_PROTECTED | ID_PRIVATE | ID_INLINE | ID_USED,
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | IDENTIFIER_PIKE_FUNCTION|
(Pike_compiler->varargs?IDENTIFIER_VARARGS:0),
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | 0,
OPT_SIDE_EFFECT|OPT_EXTERNAL_DEPEND);
}
|
3116ce | 2002-11-22 | Henrik Grubbström (Grubba) | | Pike_compiler->varargs=0;
|
b1aa47 | 2001-10-05 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_frame->current_function_number=id;
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | |
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | n=0;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass > 1 &&
(i=ID_FROM_INT(Pike_compiler->new_program, id)))
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | {
if(i->identifier_flags & IDENTIFIER_SCOPED)
n = mktrampolinenode(id, Pike_compiler->compiler_frame->previous);
else
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | n = mkidentifiernode(id);
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | }
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | low_add_local_name(Pike_compiler->compiler_frame->previous,
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $2->u.sval.u.string, type, n);
$<number>$=id;
free_string(name);
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | }
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | failsafe_block
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | {
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | int localid;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | struct identifier *i=ID_FROM_INT(Pike_compiler->new_program, $<number>5);
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
struct pike_string *save_file = c->lex.current_file;
int save_line = c->lex.current_line;
c->lex.current_file = $2->current_file;
c->lex.current_line = $2->line_number;
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | debug_malloc_touch($6);
$6=mknode(F_COMMA_EXPR,$6,mknode(F_RETURN,mkintnode(0),0));
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | debug_malloc_touch($6);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | dooptcode(i->name,
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $6,
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | i->type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_PROTECTED | ID_PRIVATE | ID_INLINE);
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
1ef557 | 2000-08-30 | Henrik Grubbström (Grubba) | | i->opt_flags = Pike_compiler->compiler_frame->opt_flags;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = save_line;
c->lex.current_file = save_file;
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $3) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $3,
Pike_compiler->compiler_frame->previous);
}
#endif
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | pop_compiler_frame();
free_node($2);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | |
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | /* WARNING: If the local function adds more variables we are screwed */
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | /* WARNING2: if add_local_name stops adding local variables at the end,
* this has to be fixed.
*/
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | localid=Pike_compiler->compiler_frame->current_number_of_locals-1;
if(Pike_compiler->compiler_frame->variable[localid].def)
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $$=copy_node(Pike_compiler->compiler_frame->variable[localid].def);
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | }else{
|
0ad650 | 2012-10-02 | Per Hedbor | | if(Pike_compiler->compiler_frame->lexical_scope &
|
b6cdf3 | 2000-06-28 | Fredrik Hübinette (Hubbe) | | (SCOPE_SCOPE_USED | SCOPE_SCOPED))
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | {
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | $$ = mktrampolinenode($<number>5,Pike_compiler->compiler_frame);
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | }else{
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | $$ = mkidentifiernode($<number>5);
|
d18707 | 2000-06-20 | Fredrik Hübinette (Hubbe) | | }
|
5fb9b0 | 2000-04-06 | Fredrik Hübinette (Hubbe) | | }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | optional_stars TOK_IDENTIFIER push_compiler_frame1 error
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | {
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $3) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $3,
Pike_compiler->compiler_frame->previous);
}
#endif
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | pop_compiler_frame();
free_node($2);
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | $$=mkintnode(0);
|
b5aa65 | 1999-12-16 | Henrik Grubbström (Grubba) | | }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | ;
|
e6c089 | 2001-03-30 | Henrik Grubbström (Grubba) | | create_arg: modifiers type_or_error optional_stars optional_dot_dot_dot TOK_IDENTIFIER
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | int ref_no;
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | |
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | if (Pike_compiler->num_create_args < 0) {
|
e6c089 | 2001-03-30 | Henrik Grubbström (Grubba) | | yyerror("Can't define more variables after ...");
}
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | push_finished_type(Pike_compiler->compiler_frame->current_type);
|
beb25e | 2005-10-14 | Henrik Grubbström (Grubba) | | if ($3 && (Pike_compiler->compiler_pass == 2) && !TEST_COMPAT (0, 6)) {
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | yywarning("The *-syntax in types is obsolete. Use array instead.");
}
while($3--) push_type(T_ARRAY);
|
e6c089 | 2001-03-30 | Henrik Grubbström (Grubba) | | if ($4) {
push_type(T_ARRAY);
}
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | type=compiler_pop_type();
|
bc3efc | 2007-10-06 | Henrik Grubbström (Grubba) | | /* Add the identifier globally.
* Note: Since these are the first identifiers (and references)
* to be added to the program, they will be numbered in
* sequence starting at 0 (zero). This means that the
* counter num_create_args is sufficient extra information
* to be able to keep track of them.
*/
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | ref_no = define_variable($5->u.sval.u.string, type,
Pike_compiler->current_modifiers);
|
bc3efc | 2007-10-06 | Henrik Grubbström (Grubba) | | free_type(type);
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | |
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | if (Pike_compiler->num_create_args != ref_no) {
my_yyerror("Multiple definitions of create variable %S (%d != %d).",
$5->u.sval.u.string,
Pike_compiler->num_create_args, ref_no);
}
if ($4) {
/* Encode varargs marker as negative number of args. */
Pike_compiler->num_create_args = -(ref_no + 1);
} else {
Pike_compiler->num_create_args = ref_no + 1;
}
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | |
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | /* free_type(type); */
|
e6c089 | 2001-03-30 | Henrik Grubbström (Grubba) | | free_node($5);
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | $$=0;
}
| modifiers type_or_error optional_stars bad_identifier { $$=0; }
;
create_arguments2: create_arg { $$ = 1; }
| create_arguments2 ',' create_arg { $$ = $1 + 1; }
| create_arguments2 ':' create_arg
{
yyerror("Unexpected ':' in create argument list.");
$$ = $1 + 1;
}
;
create_arguments: /* empty */ optional_comma { $$=0; }
| create_arguments2 optional_comma
;
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | optional_create_arguments: /* empty */ { $$ = 0; }
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | | '(' create_arguments close_paren_or_missing
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | {
|
1104c6 | 2007-10-08 | Henrik Grubbström (Grubba) | | /* NOTE: One more than the number of arguments, so that we
< * can detect the case of no parenthesis below. */
$$ = $2 + 1;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | free_node($3);
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | }
;
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | |
|
eb9ef9 | 2010-11-19 | Henrik Grubbström (Grubba) | | failsafe_program: '{' program { $<n>$ = NULL; } end_block
|
e2acf7 | 1997-04-23 | Henrik Grubbström (Grubba) | | | error { yyerrok; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF
|
e67c86 | 1998-08-01 | Henrik Grubbström (Grubba) | | {
yyerror("End of file where program definition expected.");
}
|
febbc8 | 1997-04-22 | Fredrik Hübinette (Hubbe) | | ;
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | /* Modifiers at $0. */
class: TOK_CLASS line_number_info optional_identifier
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | if(!$3)
|
51ffdb | 1998-01-19 | Fredrik Hübinette (Hubbe) | | {
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | struct pike_string *s;
|
51ffdb | 1998-01-19 | Fredrik Hübinette (Hubbe) | | char buffer[42];
|
d4f23b | 2001-08-10 | Martin Stjernholm | | sprintf(buffer,"__class_%ld_%ld_line_%d",
(long)Pike_compiler->new_program->id,
(long)Pike_compiler->local_class_counter++,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | (int) $2->line_number);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | s=make_shared_string(buffer);
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $3=mkstrnode(s);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_string(s);
|
95489a | 2008-06-29 | Martin Nilsson | | $<number>0|=ID_PROTECTED | ID_PRIVATE | ID_INLINE;
|
51ffdb | 1998-01-19 | Fredrik Hübinette (Hubbe) | | }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | /* fprintf(stderr, "LANGUAGE.YACC: CLASS start\n"); */
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass==1)
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($<number>0 & ID_EXTERN) {
|
8fd931 | 1999-12-30 | Henrik Grubbström (Grubba) | | yywarning("Extern declared class definition.");
}
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | low_start_new_program(0, 1, $3->u.sval.u.string,
$<number>0,
|
993ba7 | 2000-02-15 | Fredrik Hübinette (Hubbe) | | &$<number>$);
|
ff88db | 2000-07-12 | Henrik Grubbström (Grubba) | |
/* fprintf(stderr, "Pass 1: Program %s has id %d\n",
|
9b3902 | 2003-03-27 | Martin Stjernholm | | $4->u.sval.u.string->str, Pike_compiler->new_program->id); */
|
ff88db | 2000-07-12 | Henrik Grubbström (Grubba) | |
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | store_linenumber($2->line_number, $2->current_file);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | debug_malloc_name(Pike_compiler->new_program,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $2->current_file->str,
$2->line_number);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }else{
int i;
struct identifier *id;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | int tmp=Pike_compiler->compiler_pass;
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | i=isidentifier($3->u.sval.u.string);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | if(i<0)
{
|
6c2aad | 2003-09-01 | Martin Nilsson | | /* Seriously broken... */
|
25df64 | 2003-08-20 | Henrik Grubbström (Grubba) | | yyerror("Pass 2: program not defined!");
low_start_new_program(0, 2, 0,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $<number>0,
|
993ba7 | 2000-02-15 | Fredrik Hübinette (Hubbe) | | &$<number>$);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }else{
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | id=ID_FROM_INT(Pike_compiler->new_program, i);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | if(IDENTIFIER_IS_CONSTANT(id->identifier_flags))
{
struct svalue *s;
|
89378b | 2010-11-23 | Henrik Grubbström (Grubba) | | if ((id->func.const_info.offset >= 0) &&
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | (TYPEOF(*(s = &PROG_FROM_INT(Pike_compiler->new_program,i)->
constants[id->func.const_info.offset].sval)) ==
T_PROGRAM))
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
e60a36 | 2003-06-03 | Henrik Grubbström (Grubba) | | low_start_new_program(s->u.program, 2,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $3->u.sval.u.string,
$<number>0,
|
993ba7 | 2000-02-15 | Fredrik Hübinette (Hubbe) | | &$<number>$);
|
ff88db | 2000-07-12 | Henrik Grubbström (Grubba) | |
/* fprintf(stderr, "Pass 2: Program %s has id %d\n",
|
9b3902 | 2003-03-27 | Martin Stjernholm | | $4->u.sval.u.string->str, Pike_compiler->new_program->id); */
|
ff88db | 2000-07-12 | Henrik Grubbström (Grubba) | |
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }else{
yyerror("Pass 2: constant redefined!");
|
25df64 | 2003-08-20 | Henrik Grubbström (Grubba) | | low_start_new_program(0, 2, 0,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $<number>0,
|
993ba7 | 2000-02-15 | Fredrik Hübinette (Hubbe) | | &$<number>$);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
}else{
yyerror("Pass 2: class constant no longer constant!");
|
25df64 | 2003-08-20 | Henrik Grubbström (Grubba) | | low_start_new_program(0, 2, 0,
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $<number>0,
|
993ba7 | 2000-02-15 | Fredrik Hübinette (Hubbe) | | &$<number>$);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
}
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->compiler_pass=tmp;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
afbd44 | 2004-10-22 | Andreas (Kaos) Stenius | | {
/* Clear scoped modifiers. */
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | $<number>$ = THIS_COMPILATION->lex.pragmas;
THIS_COMPILATION->lex.pragmas &= ~ID_MODIFIER_MASK;
|
afbd44 | 2004-10-22 | Andreas (Kaos) Stenius | | }
|
c20a52 | 2000-07-08 | Henrik Grubbström (Grubba) | | optional_create_arguments failsafe_program
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | struct program *p;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
/* Check if we have create arguments but no locally defined create(). */
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($6) {
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | struct pike_string *create_string = NULL;
struct reference *ref = NULL;
struct identifier *id = NULL;
int ref_id;
MAKE_CONST_STRING(create_string, "create");
if (((ref_id = isidentifier(create_string)) < 0) ||
(ref = PTR_FROM_INT(Pike_compiler->new_program, ref_id))->inherit_offset ||
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | ((id = ID_FROM_PTR(Pike_compiler->new_program, ref))->func.offset == -1)) {
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | int e;
struct pike_type *type = NULL;
int nargs = Pike_compiler->num_create_args;
push_compiler_frame(SCOPE_LOCAL);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | /* Init: Prepend the create arguments. */
if (Pike_compiler->num_create_args < 0) {
for (e = 0; e < -Pike_compiler->num_create_args; e++) {
id = Pike_compiler->new_program->identifiers + e;
add_ref(id->type);
add_local_name(id->name, id->type, 0);
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | /* Note: add_local_name() above will return e. */
|
01e7e5 | 2008-01-03 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[e].flags |=
LOCAL_VAR_IS_USED;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
} else {
for (e = 0; e < Pike_compiler->num_create_args; e++) {
id = Pike_compiler->new_program->identifiers + e;
add_ref(id->type);
add_local_name(id->name, id->type, 0);
|
b1d40c | 2008-01-04 | Henrik Grubbström (Grubba) | | /* Note: add_local_name() above will return e. */
|
01e7e5 | 2008-01-03 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[e].flags |=
LOCAL_VAR_IS_USED;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
}
/* First: Deduce the type for the create() function. */
push_type(T_VOID); /* Return type. */
if ((e = nargs) < 0) {
/* Varargs */
e = nargs = -nargs;
push_finished_type(Pike_compiler->compiler_frame->variable[--e].type);
pop_type_stack(T_ARRAY); /* Pop one level of array. */
} else {
/* Not varargs. */
push_type(T_VOID);
}
push_type(T_MANY);
while(e--) {
push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
push_type(T_FUNCTION);
}
type = compiler_pop_type();
/* Second: Declare the function. */
Pike_compiler->compiler_frame->current_function_number=
define_function(create_string, type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_INLINE | ID_PROTECTED,
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | IDENTIFIER_PIKE_FUNCTION |
(Pike_compiler->num_create_args < 0?IDENTIFIER_VARARGS:0),
0,
OPT_SIDE_EFFECT);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
node *create_code = NULL;
int f;
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | /* Third: Generate the initialization code.
*
* global_arg = [type]local_arg;
* [,..]
*/
for(e=0; e<nargs; e++)
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | {
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | if(!Pike_compiler->compiler_frame->variable[e].name ||
!Pike_compiler->compiler_frame->variable[e].name->len)
{
my_yyerror("Missing name for argument %d.",e);
} else {
node *local_node = mklocalnode(e, 0);
/* FIXME: Should probably use some other flag. */
if ((runtime_options & RUNTIME_CHECK_TYPES) &&
(Pike_compiler->compiler_pass == 2) &&
(Pike_compiler->compiler_frame->variable[e].type !=
mixed_type_string)) {
/* fprintf(stderr, "Creating soft cast node for local #%d\n", e);*/
/* The following is needed to go around the optimization in
* mksoftcastnode().
*/
free_type(local_node->type);
copy_pike_type(local_node->type, mixed_type_string);
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | local_node = mksoftcastnode(Pike_compiler->compiler_frame->
variable[e].type, local_node);
}
create_code =
mknode(F_COMMA_EXPR, create_code,
mknode(F_ASSIGN, local_node,
mkidentifiernode(e)));
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | }
}
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | /* Fourth: Add a return 0; at the end. */
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | create_code = mknode(F_COMMA_EXPR,
mknode(F_POP_VALUE, create_code, NULL),
mknode(F_RETURN, mkintnode(0), NULL));
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | /* Fifth: Define the function. */
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | f=dooptcode(create_string, create_code, type, ID_PROTECTED);
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
#ifdef PIKE_DEBUG
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | if(Pike_interpreter.recoveries &&
Pike_sp-Pike_interpreter.evaluator_stack < Pike_interpreter.recoveries->stack_pointer)
Pike_fatal("Stack error (underflow)\n");
if(Pike_compiler->compiler_pass == 1 &&
f!=Pike_compiler->compiler_frame->current_function_number)
Pike_fatal("define_function screwed up! %d != %d\n",
f, Pike_compiler->compiler_frame->current_function_number);
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | | #endif
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | }
|
1e9a88 | 2007-10-05 | Henrik Grubbström (Grubba) | |
/* Done. */
free_type(type);
pop_compiler_frame();
}
}
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->compiler_pass == 1)
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | p=end_first_pass(0);
else
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | p=end_first_pass(1);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | /* fprintf(stderr, "LANGUAGE.YACC: CLASS end\n"); */
|
903dd3 | 2004-03-13 | Henrik Grubbström (Grubba) | | if(p) {
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | /* Update the type for the program constant,
* since we might have a lfun::create(). */
struct identifier *i;
struct svalue sv;
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | SET_SVAL(sv, T_PROGRAM, 0, program, p);
|
5a1b59 | 2009-11-17 | Henrik Grubbström (Grubba) | | i = ID_FROM_INT(Pike_compiler->new_program, $<number>4);
free_type(i->type);
i->type = get_type_of_svalue(&sv);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | free_program(p);
|
4eab66 | 2004-03-17 | Henrik Grubbström (Grubba) | | } else if (!Pike_compiler->num_parse_error) {
|
72de5a | 2004-03-13 | Henrik Grubbström (Grubba) | | /* Make sure code in this class is aware that something went wrong. */
|
4eab66 | 2004-03-17 | Henrik Grubbström (Grubba) | | Pike_compiler->num_parse_error = 1;
|
2401c7 | 2000-01-03 | Martin Stjernholm | | }
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | $$=mkidentifiernode($<number>4);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | |
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | free_node($2);
|
afbd44 | 2004-10-22 | Andreas (Kaos) Stenius | | free_node($3);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | check_tree($$,0);
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | THIS_COMPILATION->lex.pragmas = $<number>5;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | simple_identifier: TOK_IDENTIFIER
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | | bad_identifier { $$ = 0; }
;
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | enum_value: /* EMPTY */ { $$ = 0; }
| '=' safe_expr0 { $$ = $2; }
;
/* Previous enum value at $0. */
enum_def: /* EMPTY */
| simple_identifier enum_value
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | {
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | if ($1) {
if ($2) {
/* Explicit enum value. */
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | |
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | /* This can be made more lenient in the future */
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | |
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | /* Ugly hack to make sure that $2 is optimized */
{
int tmp=Pike_compiler->compiler_pass;
$2=mknode(F_COMMA_EXPR,$2,0);
Pike_compiler->compiler_pass=tmp;
}
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | |
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | if(!is_const($2))
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | {
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | if(Pike_compiler->compiler_pass==2)
yyerror("Enum definition is not constant.");
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | push_int(0);
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | } else {
if(!Pike_compiler->num_parse_error)
{
ptrdiff_t tmp=eval_low($2,1);
if(tmp < 1)
{
yyerror("Error in enum definition.");
push_int(0);
}else{
pop_n_elems(DO_NOT_WARN((INT32)(tmp - 1)));
}
} else {
push_int(0);
}
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | }
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | free_node($2);
free_node($<n>0);
$<n>0 = mkconstantsvaluenode(Pike_sp-1);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | } else {
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | /* Implicit enum value. */
$<n>0 = safe_inc_enum($<n>0);
push_svalue(&$<n>0->u.sval);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | }
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | add_constant($1->u.sval.u.string, Pike_sp-1,
(Pike_compiler->current_modifiers & ~ID_EXTERN) | ID_INLINE);
/* Update the type. */
{
struct pike_type *current = pop_unfinished_type();
struct pike_type *new = get_type_of_svalue(Pike_sp-1);
|
2a61e8 | 2011-03-24 | Henrik Grubbström (Grubba) | | struct pike_type *res = or_pike_types(new, current, 3);
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | free_type(current);
free_type(new);
type_stack_mark();
push_finished_type(res);
free_type(res);
}
pop_stack();
free_node($1);
|
43eaff | 2008-07-18 | Henrik Grubbström (Grubba) | | } else if ($2) {
free_node($2);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | }
}
;
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | /* Previous enum value at $-2 */
propagated_enum_value:
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | {
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | $$ = $<n>-2;
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | }
;
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | /* Previous enum value at $0. */
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | enum_list: enum_def
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | | enum_list ',' propagated_enum_value enum_def { $<n>0 = $3; }
|
cd6900 | 2004-07-23 | Henrik Grubbström (Grubba) | | | error
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | ;
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | /* Modifiers at $0. */
enum: TOK_ENUM
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | {
if ((Pike_compiler->current_modifiers & ID_EXTERN) &&
(Pike_compiler->compiler_pass == 1)) {
yywarning("Extern declared enum.");
}
type_stack_mark();
push_type(T_ZERO); /* Joined type so far. */
}
|
0ad650 | 2012-10-02 | Per Hedbor | | optional_identifier '{'
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | {
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | push_int(-1); /* Previous value. */
$<n>$ = mkconstantsvaluenode(Pike_sp-1);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_stack();
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | }
|
eb9ef9 | 2010-11-19 | Henrik Grubbström (Grubba) | | enum_list { $<n>$ = NULL; } end_block
|
e33ab9 | 2008-07-18 | Henrik Grubbström (Grubba) | | {
struct pike_type *t = pop_unfinished_type();
free_node($<n>5);
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | if ($3) {
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | ref_push_type_value(t);
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | add_constant($3->u.sval.u.string, Pike_sp-1,
|
3e1361 | 2001-04-03 | Henrik Grubbström (Grubba) | | (Pike_compiler->current_modifiers & ~ID_EXTERN) | ID_INLINE);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | pop_stack();
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | free_node($3);
|
a418ce | 2001-03-31 | Henrik Grubbström (Grubba) | | }
$$ = mktypenode(t);
free_type(t);
}
;
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | typedef: modifiers TOK_TYPEDEF full_type simple_identifier ';'
{
struct pike_type *t = compiler_pop_type();
if ((Pike_compiler->current_modifiers & ID_EXTERN) &&
(Pike_compiler->compiler_pass == 1)) {
yywarning("Extern declared typedef.");
}
if ($4) {
ref_push_type_value(t);
add_constant($4->u.sval.u.string, Pike_sp-1,
|
3e1361 | 2001-04-03 | Henrik Grubbström (Grubba) | | (Pike_compiler->current_modifiers & ~ID_EXTERN) | ID_INLINE);
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | pop_stack();
free_node($4);
}
free_type(t);
}
;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | cond: TOK_IF
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
Pike_compiler->compiler_frame->last_block_level=$<number>2;
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | '(' safe_comma_expr end_cond statement optional_else_part
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | $$ = mknode('?', $6,
|
0ef4e0 | 2002-05-09 | Henrik Grubbström (Grubba) | | mknode(':',
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | mkcastnode(void_type_string, $8),
mkcastnode(void_type_string, $9)));
|
f224bf | 2010-02-03 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
0ef4e0 | 2002-05-09 | Henrik Grubbström (Grubba) | | $$ = mkcastnode(void_type_string, $$);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($3);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | end_cond: ')'
| '}' { yyerror("Missing ')'."); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing ')'.");
yyerror("Unexpected end of file.");
}
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | optional_else_part: { $$=0; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_ELSE statement { $$=$2; }
|
0ad650 | 2012-10-02 | Per Hedbor | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | safe_lvalue: lvalue
|
a23d57 | 2008-01-07 | Henrik Grubbström (Grubba) | | {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | if (!(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES) && $1) {
|
a23d57 | 2008-01-07 | Henrik Grubbström (Grubba) | | if ($1->token == F_ARRAY_LVALUE) {
mark_lvalues_as_used(CAR($1));
} else if (($1->token == F_LOCAL) && !($1->u.integer.b)) {
Pike_compiler->compiler_frame->variable[$1->u.integer.a].flags |=
LOCAL_VAR_IS_USED;
}
}
}
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | error { $$=0; }
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | ;
safe_expr0: expr0
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF { yyerror("Unexpected end of file."); $$=0; }
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | | error { $$=0; }
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | ;
|
4cdb80 | 2001-02-23 | Fredrik Hübinette (Hubbe) | |
foreach_optional_lvalue: /* empty */ { $$=0; }
| safe_lvalue
;
foreach_lvalues: ',' safe_lvalue { $$=$2; }
| ';' foreach_optional_lvalue ';' foreach_optional_lvalue
{ $$=mknode(':',$2,$4); }
;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | foreach: TOK_FOREACH
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
9b3902 | 2003-03-27 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
Pike_compiler->compiler_frame->last_block_level=$<number>2;
}
|
4cdb80 | 2001-02-23 | Fredrik Hübinette (Hubbe) | | '(' expr0 foreach_lvalues end_cond statement
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | if ($7) {
|
4cdb80 | 2001-02-23 | Fredrik Hübinette (Hubbe) | | $$=mknode(F_FOREACH,
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | mknode(F_VAL_LVAL,$6,$7),
$9);
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | } else {
/* Error in lvalue */
|
5c977e | 2012-05-22 | Henrik Grubbström (Grubba) | | $$=mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $6), $9);
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | }
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($3);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
9b3902 | 2003-03-27 | Martin Stjernholm | | do: TOK_DO line_number_info statement
TOK_WHILE '(' safe_comma_expr end_cond expected_semicolon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
9b3902 | 2003-03-27 | Martin Stjernholm | | $$=mknode(F_DO,$3,$6);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($2);
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
9b3902 | 2003-03-27 | Martin Stjernholm | | | TOK_DO line_number_info statement TOK_WHILE TOK_LEX_EOF
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | {
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($2);
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | $$=0;
yyerror("Missing '(' in do-while loop.");
yyerror("Unexpected end of file.");
}
|
9b3902 | 2003-03-27 | Martin Stjernholm | | | TOK_DO line_number_info statement TOK_LEX_EOF
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | {
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($2);
|
07f33e | 1998-11-05 | Henrik Grubbström (Grubba) | | $$=0;
yyerror("Missing 'while' in do-while loop.");
yyerror("Unexpected end of file.");
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | expected_semicolon: ';'
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | {
yyerror("Missing ';'.");
yyerror("Unexpected end of file.");
}
;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | for: TOK_FOR
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
Pike_compiler->compiler_frame->last_block_level=$<number>2;
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | '(' unused expected_semicolon for_expr expected_semicolon unused end_cond
statement
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | $$=mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $6),
mknode(F_FOR,$8,mknode(':',$12,$10)));
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($3);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | while: TOK_WHILE
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
Pike_compiler->compiler_frame->last_block_level=$<number>2;
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | '(' safe_comma_expr end_cond statement
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | $$=mknode(F_FOR,$6,mknode(':',$8,NULL));
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($3);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
5a0fd5 | 2001-01-10 | Martin Stjernholm | | Pike_compiler->compiler_frame->opt_flags |= OPT_CUSTOM_LABELS;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
for_expr: /* EMPTY */ { $$=mkintnode(1); }
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | | safe_comma_expr
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | switch: TOK_SWITCH
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | }
|
9b3902 | 2003-03-27 | Martin Stjernholm | | line_number_info
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | {
/* Trick to store more than one number on compiler stack - Hubbe */
$<number>$=Pike_compiler->compiler_frame->last_block_level;
Pike_compiler->compiler_frame->last_block_level=$<number>2;
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | '(' safe_comma_expr end_cond statement
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | $$=mknode(F_SWITCH,$6,$8);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($3);
|
b1f4eb | 1998-01-13 | Fredrik Hübinette (Hubbe) | | pop_local_variables($<number>2);
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->last_block_level=$<number>4;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | case: TOK_CASE safe_comma_expr expected_colon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
$$=mknode(F_CASE,$2,0);
}
|
a7c3a4 | 2000-07-10 | Henrik Grubbström (Grubba) | | | TOK_CASE safe_comma_expr expected_dot_dot optional_comma_expr expected_colon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
9abda4 | 2002-03-02 | Martin Stjernholm | | $$=mknode(F_CASE_RANGE,$2,$4);
}
| TOK_CASE expected_dot_dot safe_comma_expr expected_colon
{
$$=mknode(F_CASE_RANGE,0,$3);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | expected_colon: ':'
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | | ';'
{
yyerror("Missing ':'.");
}
| '}'
{
yyerror("Missing ':'.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LEX_EOF
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
3d7882 | 1999-11-06 | Henrik Grubbström (Grubba) | | yyerror("Missing ':'.");
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
;
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | return: TOK_RETURN expected_semicolon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
b8cd05 | 2000-09-26 | Fredrik Hübinette (Hubbe) | | if(!TEST_COMPAT(0,6) &&
!match_types(Pike_compiler->compiler_frame->current_return_type,
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | void_type_string))
{
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | yytype_error("Must return a value for a non-void function.",
Pike_compiler->compiler_frame->current_return_type,
void_type_string, 0);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
$$=mknode(F_RETURN,mkintnode(0),0);
}
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | | TOK_RETURN safe_comma_expr expected_semicolon
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
$$=mknode(F_RETURN,$2,0);
}
;
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | unused: { $$=0; }
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | | safe_comma_expr { $$=mkcastnode(void_type_string, $1); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
babd87 | 2001-02-23 | Henrik Grubbström (Grubba) | | unused2: comma_expr { $$=mkcastnode(void_type_string, $1); } ;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | |
|
ba62cf | 1997-09-18 | Fredrik Hübinette (Hubbe) | | optional_comma_expr: { $$=0; }
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | | safe_comma_expr
;
safe_comma_expr: comma_expr
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | | error { $$=0; }
|
ba62cf | 1997-09-18 | Fredrik Hübinette (Hubbe) | | ;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | comma_expr: comma_expr2
|
6bc928 | 1998-04-10 | Fredrik Hübinette (Hubbe) | | | simple_type2 local_name_list { $$=$2; free_node($1); }
| simple_identifier_type local_name_list2 { $$=$2; free_node($1); }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | | simple_identifier_type local_function { $$=$2; free_node($1); }
| simple_type2 local_function2 { $$=$2; free_node($1); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | |
comma_expr2: expr0
| comma_expr2 ',' expr0
{
|
0ad650 | 2012-10-02 | Per Hedbor | | $$ = mknode(F_COMMA_EXPR, mkcastnode(void_type_string, $1), $3);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr00: expr0
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | '@' expr0 { $$=mknode(F_PUSH_ARRAY,$2,0); };
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr0: expr01
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr4 '=' expr0 { $$=mknode(F_ASSIGN,$3,$1); }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | expr4 '=' error { $$=$1; reset_type_stack(); yyerrok; }
|
a66319 | 1998-04-17 | Henrik Grubbström (Grubba) | | | bad_expr_ident '=' expr0 { $$=$3; }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_bracket_with_line_info low_lvalue_list ']' '=' expr0
{
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | if (!(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES)) {
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | mark_lvalues_as_used($2);
}
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mknode(F_ASSIGN,$5,mknode(F_ARRAY_LVALUE,$2,0));
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr4 assign expr0 { $$=mknode($2,$1,$3); }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | expr4 assign error { $$=$1; reset_type_stack(); yyerrok; }
|
a66319 | 1998-04-17 | Henrik Grubbström (Grubba) | | | bad_expr_ident assign expr0 { $$=$3; }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_bracket_with_line_info low_lvalue_list ']' assign expr0
{
$$=mknode($4,mknode(F_ARRAY_LVALUE,$2,0),$5);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
}
| open_bracket_with_line_info low_lvalue_list ']' error
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | {
$$=$2; free_node ($1); reset_type_stack(); yyerrok;
}
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | /* | error { $$=0; reset_type_stack(); } */
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | expr01: expr1
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr1 '?' expr01 ':' expr01 { $$=mknode('?',$1,mknode(':',$3,$5)); }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | assign: TOK_AND_EQ { $$=F_AND_EQ; }
| TOK_OR_EQ { $$=F_OR_EQ; }
| TOK_XOR_EQ { $$=F_XOR_EQ; }
| TOK_LSH_EQ { $$=F_LSH_EQ; }
| TOK_RSH_EQ { $$=F_RSH_EQ; }
| TOK_ADD_EQ { $$=F_ADD_EQ; }
| TOK_SUB_EQ { $$=F_SUB_EQ; }
| TOK_MULT_EQ{ $$=F_MULT_EQ; }
| TOK_MOD_EQ { $$=F_MOD_EQ; }
| TOK_DIV_EQ { $$=F_DIV_EQ; }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
cbae7e | 2000-03-30 | Henrik Grubbström (Grubba) | | optional_comma: { $$=0; } | ',' { $$=1; };
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr_list: { $$=0; }
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | expr_list2 optional_comma
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr_list2: expr00
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr_list2 ',' expr00 { $$=mknode(F_ARG_LIST,$1,$3); }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
m_expr_list: { $$=0; }
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | m_expr_list2 optional_comma
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
m_expr_list2: assoc_pair
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | | m_expr_list2 ',' assoc_pair
{
if ($3) {
$$=mknode(F_ARG_LIST,$1,$3);
} else {
/* Error in assoc_pair */
$$=$1;
}
}
| m_expr_list2 ',' error
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
0ad650 | 2012-10-02 | Per Hedbor | | assoc_pair: expr0 expected_colon expr0
|
327118 | 2004-03-18 | Henrik Grubbström (Grubba) | | {
$$=mknode(F_ARG_LIST,$1,$3);
}
|
73a2a1 | 1998-04-27 | Henrik Grubbström (Grubba) | | | expr0 expected_colon error { free_node($1); $$=0; }
|
998e1f | 1998-04-15 | Henrik Grubbström (Grubba) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr1: expr2
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr1 TOK_LOR expr1 { $$=mknode(F_LOR,$1,$3); }
| expr1 TOK_LAND expr1 { $$=mknode(F_LAND,$1,$3); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr1 '|' expr1 { $$=mkopernode("`|",$1,$3); }
| expr1 '^' expr1 { $$=mkopernode("`^",$1,$3); }
| expr1 '&' expr1 { $$=mkopernode("`&",$1,$3); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr1 TOK_EQ expr1 { $$=mkopernode("`==",$1,$3); }
| expr1 TOK_NE expr1 { $$=mkopernode("`!=",$1,$3); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr1 '>' expr1 { $$=mkopernode("`>",$1,$3); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr1 TOK_GE expr1 { $$=mkopernode("`>=",$1,$3); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr1 '<' expr1 { $$=mkopernode("`<",$1,$3); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr1 TOK_LE expr1 { $$=mkopernode("`<=",$1,$3); }
| expr1 TOK_LSH expr1 { $$=mkopernode("`<<",$1,$3); }
| expr1 TOK_RSH expr1 { $$=mkopernode("`>>",$1,$3); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | expr1 '+' expr1 { $$=mkopernode("`+",$1,$3); }
| expr1 '-' expr1 { $$=mkopernode("`-",$1,$3); }
| expr1 '*' expr1 { $$=mkopernode("`*",$1,$3); }
| expr1 '%' expr1 { $$=mkopernode("`%",$1,$3); }
| expr1 '/' expr1 { $$=mkopernode("`/",$1,$3); }
|
0ad650 | 2012-10-02 | Per Hedbor | | | expr1 TOK_LOR error
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr1 TOK_LAND error
|
0ad650 | 2012-10-02 | Per Hedbor | | | expr1 '|' error
| expr1 '^' error
| expr1 '&' error
| expr1 TOK_EQ error
| expr1 TOK_NE error
| expr1 '>' error
| expr1 TOK_GE error
| expr1 '<' error
| expr1 TOK_LE error
| expr1 TOK_LSH error
| expr1 TOK_RSH error
| expr1 '+' error
| expr1 '-' error
| expr1 '*' error
| expr1 '%' error
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | | expr1 '/' error
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr2: expr3
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | cast expr2
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | $$ = mkcastnode($1->u.sval.u.type, $2);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($1);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | | soft_cast expr2
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | $$ = mksoftcastnode($1->u.sval.u.type, $2);
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | free_node($1);
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_INC expr4 { $$=mknode(F_INC,$2,0); }
| TOK_DEC expr4 { $$=mknode(F_DEC,$2,0); }
| TOK_NOT expr2 { $$=mkopernode("`!",$2,0); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | '~' expr2 { $$=mkopernode("`~",$2,0); }
| '-' expr2 { $$=mkopernode("`-",$2,0); }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
expr3: expr4
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | expr4 TOK_INC { $$=mknode(F_POST_INC,$1,0); }
| expr4 TOK_DEC { $$=mknode(F_POST_DEC,$1,0); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | /* FIXMEs
* It would be nice if 'return' would exit from
* the surrounding function rather than from the
* implicit lambda. (I think) So beware that the
* behaviour of 'return' might change some day.
* -Hubbe
*
* It would also be nice if it was possible to send
* arguments to the implicit function, but it would
* require using ugly implicit variables or extending
* the syntax, and if you extend the syntax you might
* as well use lambda() instead.
* -Hubbe
*
* We might want to allow having more than block after
* a function ( ie. func(args) {} {} {} {} )
* -Hubbe
*/
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | optional_block: /* EMPTY */ { $$=0; }
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | | '{' line_number_info
/* FIXME: Use implicit_identifier to make __func__ point to the lambda? */
push_compiler_frame0
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | {
debug_malloc_touch(Pike_compiler->compiler_frame->current_return_type);
if(Pike_compiler->compiler_frame->current_return_type)
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(Pike_compiler->compiler_frame->current_return_type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(Pike_compiler->compiler_frame->current_return_type,
any_type_string);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | |
/* block code */
$<number>1=Pike_compiler->num_used_modules;
|
c68a29 | 2001-06-10 | Henrik Grubbström (Grubba) | | $<number>$=Pike_compiler->compiler_frame->current_number_of_locals;
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | }
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | statements end_block
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type;
|
c68a29 | 2001-06-10 | Henrik Grubbström (Grubba) | | int f/*, e */;
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | struct pike_string *name;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
struct pike_string *save_file = c->lex.current_file;
int save_line = c->lex.current_line;
c->lex.current_file = $2->current_file;
c->lex.current_line = $2->line_number;
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | |
/* block code */
unuse_modules(Pike_compiler->num_used_modules - $<number>1);
|
9b3902 | 2003-03-27 | Martin Stjernholm | | pop_local_variables($<number>4);
|
c68a29 | 2001-06-10 | Henrik Grubbström (Grubba) | |
|
9b3902 | 2003-03-27 | Martin Stjernholm | | debug_malloc_touch($5);
$5=mknode(F_COMMA_EXPR,$5,mknode(F_RETURN,mkintnode(0),0));
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
|
cbdf33 | 2003-03-27 | Martin Stjernholm | | /* Doing this in pass 1 might induce too strict checks on types
* in cases where we got placeholders. */
type=find_return_type($5);
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | if (type) {
push_finished_type(type);
free_type(type);
} else {
yywarning("Failed to determine return type for implicit lambda.");
push_type(T_ZERO);
}
} else {
/* Tentative return type. */
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | push_type(T_MIXED);
|
e3866b | 2007-09-03 | Henrik Grubbström (Grubba) | | }
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | push_type(T_VOID);
push_type(T_MANY);
/*
|
9b3902 | 2003-03-27 | Martin Stjernholm | | e=$5-1;
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | for(; e>=0; e--)
push_finished_type(Pike_compiler->compiler_frame->variable[e].type);
*/
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | type=compiler_pop_type();
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | name = get_new_name(NULL);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | |
#ifdef LAMBDA_DEBUG
fprintf(stderr, "%d: IMPLICIT LAMBDA: %s 0x%08lx 0x%08lx\n",
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_pass, name->str,
(long)Pike_compiler->new_program->id,
Pike_compiler->local_class_counter-1);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | #endif /* LAMBDA_DEBUG */
|
0ad650 | 2012-10-02 | Per Hedbor | |
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | f=dooptcode(name,
|
9b3902 | 2003-03-27 | Martin Stjernholm | | $5,
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | type,
|
95489a | 2008-06-29 | Martin Nilsson | | ID_PROTECTED | ID_PRIVATE | ID_INLINE | ID_USED);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | |
if(Pike_compiler->compiler_frame->lexical_scope & SCOPE_SCOPED) {
|
8c70ba | 2001-09-28 | Fredrik Hübinette (Hubbe) | | $$ = mktrampolinenode(f,Pike_compiler->compiler_frame->previous);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | } else {
$$ = mkidentifiernode(f);
}
|
d4f23b | 2001-08-10 | Martin Stjernholm | |
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | c->lex.current_line = save_line;
c->lex.current_file = save_file;
|
9b3902 | 2003-03-27 | Martin Stjernholm | | free_node ($2);
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | free_string(name);
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(type);
|
bc6289 | 2009-06-22 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
if (Pike_compiler->compiler_frame != $3) {
Pike_fatal("Lost track of compiler_frame!\n"
" Got: %p (Expected: %p) Previous: %p\n",
Pike_compiler->compiler_frame, $3,
Pike_compiler->compiler_frame->previous);
}
#endif
|
a30f09 | 2000-07-12 | Fredrik Hübinette (Hubbe) | | pop_compiler_frame();
}
;
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | apply:
expr4 open_paren_with_line_info expr_list ')' optional_block
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | $$ = mkapplynode($1, mknode(F_ARG_LIST, $3, $5));
COPY_LINE_NUMBER_INFO($$, $2);
free_node ($2);
}
| expr4 open_paren_with_line_info error ')' optional_block
{
$$=mkapplynode($1, $5);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
yyerrok;
}
| expr4 open_paren_with_line_info error TOK_LEX_EOF
{
yyerror("Missing ')'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mkapplynode($1, NULL);
free_node ($2);
}
| expr4 open_paren_with_line_info error ';'
{
yyerror("Missing ')'.");
$$=mkapplynode($1, NULL);
free_node ($2);
}
| expr4 open_paren_with_line_info error '}'
{
yyerror("Missing ')'.");
$$=mkapplynode($1, NULL);
free_node ($2);
}
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | ;
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | implicit_modifiers:
{
|
247987 | 2008-05-07 | Henrik Grubbström (Grubba) | | if (TEST_COMPAT(7, 6)) {
$$ = Pike_compiler->current_modifiers =
(THIS_COMPILATION->lex.pragmas & ID_MODIFIER_MASK);
} else {
|
95489a | 2008-06-29 | Martin Nilsson | | $$ = Pike_compiler->current_modifiers = ID_PROTECTED|ID_INLINE|ID_PRIVATE |
|
247987 | 2008-05-07 | Henrik Grubbström (Grubba) | | (THIS_COMPILATION->lex.pragmas & ID_MODIFIER_MASK);
}
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | }
;
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | expr4: string
|
0ad650 | 2012-10-02 | Per Hedbor | | | TOK_NUMBER
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | | TOK_FLOAT { $$=mkfloatnode((FLOAT_TYPE)$1); }
| catch
| gauge
| typeof
| sscanf
| lambda
|
2a343f | 2008-04-04 | Henrik Grubbström (Grubba) | | | implicit_modifiers class { $$ = $2; }
| implicit_modifiers enum { $$ = $2; }
|
55bd77 | 2005-02-18 | Henrik Grubbström (Grubba) | | | idents2
| apply
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | expr4 open_bracket_with_line_info '*' ']'
{
$$=mknode(F_AUTO_MAP_MARKER, $1, 0);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
}
| expr4 open_bracket_with_line_info expr0 ']'
{
$$=mknode(F_INDEX,$1,$3);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | expr4 open_bracket_with_line_info
|
408a1e | 2004-10-30 | Martin Stjernholm | | range_bound expected_dot_dot range_bound ']'
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
|
408a1e | 2004-10-30 | Martin Stjernholm | | $$=mknode(F_RANGE,$1,mknode(':',$3,$5));
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
|
0ad650 | 2012-10-02 | Per Hedbor | | | expr4 TOK_SAFE_START_INDEX line_number_info expr0 ']'
{
/* A?[X] to ((tmp=A) && tmp[X]) */
if( $1->token == F_LOCAL )
{
$$=mknode(F_LAND, $1, mknode(F_INDEX, $1, $4));
}
else
{
fix_type_field( $1 );
if( $1->type )
{
int temporary;
$1->type->refs++;
temporary = add_local_name(empty_pike_string, $1->type, 0);
Pike_compiler->compiler_frame->variable[temporary].flags |= LOCAL_VAR_IS_USED;
$$=mknode(F_LAND,
mknode(F_ASSIGN, $1, mklocalnode(temporary,0)),
mknode(F_INDEX, mklocalnode(temporary,0), $4));
}
else
{
$$=mknode(F_INDEX, $1,$4);
yyerror("Indexing unexpected value.");
}
}
COPY_LINE_NUMBER_INFO($$, $3);
free_node ($3);
}
| expr4 TOK_SAFE_START_INDEX line_number_info
range_bound expected_dot_dot range_bound ']'
{
/* A?[X..Y] to ((tmp=A) && tmp[X..Y]) */
node *range = mknode(':',$4,$6);
if( $1->token == F_LOCAL )
{
$$ = mknode( F_LAND, $1, mknode(F_RANGE, $1, range) );
}
else
{
fix_type_field( $1 );
if( $1->type )
{
int temporary;
$1->type->refs++;
temporary = add_local_name(empty_pike_string, $1->type, 0);
Pike_compiler->compiler_frame->variable[temporary].flags |= LOCAL_VAR_IS_USED;
$$=mknode(F_LAND,
mknode(F_ASSIGN, $1, mklocalnode(temporary,0) ),
mknode(F_RANGE, mklocalnode(temporary,0), range) );
}
else
{
$$ = mknode( F_LAND, $1, mknode(F_RANGE,$1,range) );
yyerror("Indexing unexpected value.");
}
}
COPY_LINE_NUMBER_INFO($$, $3);
free_node ($3);
COPY_LINE_NUMBER_INFO($$, $3);
free_node ($3);
}
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | expr4 open_bracket_with_line_info error ']'
{
$$=$1;
free_node ($2);
yyerrok;
}
| expr4 open_bracket_with_line_info error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
$$=$1; yyerror("Missing ']'.");
yyerror("Unexpected end of file.");
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | expr4 open_bracket_with_line_info error ';'
{$$=$1; yyerror("Missing ']'."); free_node ($2);}
| expr4 open_bracket_with_line_info error '}'
{$$=$1; yyerror("Missing ']'."); free_node ($2);}
| expr4 open_bracket_with_line_info error ')'
{$$=$1; yyerror("Missing ']'."); free_node ($2);}
| open_paren_with_line_info comma_expr2 ')'
|
63e584 | 2005-01-27 | Henrik Grubbström (Grubba) | | {
$$=$2;
if ($$) {
COPY_LINE_NUMBER_INFO($$, $1);
}
free_node ($1);
}
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_paren_with_line_info '{' expr_list close_brace_or_missing ')'
{
|
eebdfd | 2005-02-28 | Henrik Grubbström (Grubba) | | /* FIXME: May eat lots of stack; cf Standards.FIPS10_4.divisions */
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mkefuncallnode("aggregate",$3);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
}
| open_paren_with_line_info
open_bracket_with_line_info /* Only to avoid shift/reduce conflicts. */
m_expr_list close_bracket_or_missing ')'
{
|
eebdfd | 2005-02-28 | Henrik Grubbström (Grubba) | | /* FIXME: May eat lots of stack; cf Standards.FIPS10_4.divisions */
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mkefuncallnode("aggregate_mapping",$3);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $1);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($1);
free_node ($2);
}
| TOK_MULTISET_START line_number_info expr_list TOK_MULTISET_END
{
|
eebdfd | 2005-02-28 | Henrik Grubbström (Grubba) | | /* FIXME: May eat lots of stack; cf Standards.FIPS10_4.divisions */
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mkefuncallnode("aggregate_multiset",$3);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
}
| TOK_MULTISET_START line_number_info expr_list ')'
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | {
yyerror("Missing '>'.");
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mkefuncallnode("aggregate_multiset",$3);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $2);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($2);
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_paren_with_line_info error ')' { $$=$1; yyerrok; }
| open_paren_with_line_info error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=$1; yyerror("Missing ')'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_paren_with_line_info error ';' { $$=$1; yyerror("Missing ')'."); }
| open_paren_with_line_info error '}' { $$=$1; yyerror("Missing ')'."); }
| TOK_MULTISET_START line_number_info error TOK_MULTISET_END { $$=$2; yyerrok; }
| TOK_MULTISET_START line_number_info error ')' {
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | yyerror("Missing '>'.");
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=$2; yyerrok;
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | TOK_MULTISET_START line_number_info error TOK_LEX_EOF
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | {
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=$2; yyerror("Missing '>)'.");
|
76b449 | 1999-12-09 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | TOK_MULTISET_START line_number_info error ';' { $$=$2; yyerror("Missing '>)'."); }
| TOK_MULTISET_START line_number_info error '}' { $$=$2; yyerror("Missing '>)'."); }
| expr4 TOK_ARROW line_number_info magic_identifier
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | {
|
10fe60 | 2003-10-01 | Martin Stjernholm | | $$=mknode(F_ARROW,$1,$4);
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | COPY_LINE_NUMBER_INFO($$, $3);
|
10fe60 | 2003-10-01 | Martin Stjernholm | | free_node ($3);
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | }
|
0ad650 | 2012-10-02 | Per Hedbor | | | expr4 TOK_SAFE_INDEX line_number_info TOK_IDENTIFIER
{
/* A?->B to ((tmp=A) && tmp->B) */
int temporary;
if( $1->token == F_LOCAL )
{
$$=mknode(F_LAND, $1, mknode(F_ARROW, $1, $4));
}
else
{
fix_type_field( $1 );
if( $1->type )
{
$1->type->refs++;
temporary = add_local_name(empty_pike_string, $1->type, 0);
Pike_compiler->compiler_frame->variable[temporary].flags |= LOCAL_VAR_IS_USED;
$$=mknode(F_LAND,
mknode(F_ASSIGN, $1, mklocalnode(temporary,0)),
mknode(F_ARROW, mklocalnode(temporary,0), $4));
}
else
{
$$=mknode(F_ARROW, $1,$4);
yyerror("Indexing unexpected value.");
}
}
COPY_LINE_NUMBER_INFO($$, $3);
free_node ($3);
}
|
7ad270 | 2011-07-06 | Per Hedbor | | | expr4 '.' line_number_info TOK_IDENTIFIER
{
$$=index_node($1,".",$4->u.sval.u.string);
COPY_LINE_NUMBER_INFO($$, $3);
|
5e633b | 2011-07-07 | Henrik Grubbström (Grubba) | | free_node ($1);
|
7ad270 | 2011-07-06 | Per Hedbor | | free_node ($3);
|
5e633b | 2011-07-07 | Henrik Grubbström (Grubba) | | free_node ($4);
|
7ad270 | 2011-07-06 | Per Hedbor | | }
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | expr4 TOK_ARROW line_number_info error {$$=$1; free_node ($3);}
|
d2c608 | 1996-11-07 | Fredrik Hübinette (Hubbe) | | ;
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | idents2: idents
| TOK_LOCAL_ID TOK_COLON_COLON TOK_IDENTIFIER
{
int i;
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $3->u.sval.u.string);
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | |
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if (((i = find_shared_string_identifier(Pike_compiler->last_identifier,
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->new_program)) >= 0) ||
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | ((i = really_low_find_shared_string_identifier(Pike_compiler->last_identifier,
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->new_program,
|
653093 | 2008-06-29 | Martin Nilsson | | SEE_PROTECTED|
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | SEE_PRIVATE)) >= 0)) {
|
acbe8a | 2002-09-21 | Martin Stjernholm | | struct reference *ref = Pike_compiler->new_program->identifier_references + i;
if (!TEST_COMPAT (7, 2) &&
IDENTIFIER_IS_VARIABLE (
ID_FROM_PTR (Pike_compiler->new_program, ref)->identifier_flags)) {
/* Allowing local:: on variables would lead to pathological
* behavior: If a non-local variable in a class is referenced
* both with and without local::, both references would
* address the same variable in all cases except where an
* inheriting program overrides it (c.f. [bug 1252]).
*
* Furthermore, that's not how it works currently; if this
* error is removed then local:: will do nothing on variables
* except forcing a lookup in the closest surrounding class
* scope. */
|
c0dec7 | 2002-09-21 | Martin Stjernholm | | yyerror ("Cannot make local references to variables.");
|
acbe8a | 2002-09-21 | Martin Stjernholm | | $$ = 0;
}
else {
if (!(ref->id_flags & ID_HIDDEN)) {
/* We need to generate a new reference. */
int d;
struct reference funp = *ref;
funp.id_flags = (funp.id_flags & ~ID_INHERITED) | ID_INLINE|ID_HIDDEN;
i = -1;
for(d = 0; d < (int)Pike_compiler->new_program->num_identifier_references; d++) {
struct reference *refp;
refp = Pike_compiler->new_program->identifier_references + d;
|
0df6e3 | 2007-10-13 | Henrik Grubbström (Grubba) | | if((refp->inherit_offset == funp.inherit_offset) &&
(refp->identifier_offset == funp.identifier_offset) &&
((refp->id_flags | ID_USED) == (funp.id_flags | ID_USED))) {
|
acbe8a | 2002-09-21 | Martin Stjernholm | | i = d;
break;
}
}
if (i < 0) {
add_to_identifier_references(funp);
i = Pike_compiler->new_program->num_identifier_references - 1;
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | }
}
|
acbe8a | 2002-09-21 | Martin Stjernholm | | $$ = mkidentifiernode(i);
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | }
} else {
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | if (Pike_compiler->compiler_pass == 2) {
|
ce060e | 2004-06-30 | Martin Nilsson | | my_yyerror("%S not defined in local scope.",
Pike_compiler->last_identifier);
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | $$ = 0;
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | } else {
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | $$ = mknode(F_UNDEFINED, 0, 0);
|
71d970 | 2000-06-21 | Henrik Grubbström (Grubba) | | }
}
free_node($3);
}
| TOK_LOCAL_ID TOK_COLON_COLON bad_identifier
{
$$=0;
}
;
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | idents: low_idents
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | idents '.' TOK_IDENTIFIER
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | {
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | $$=index_node($1, Pike_compiler->last_identifier?Pike_compiler->last_identifier->str:NULL,
|
fae37d | 1998-08-30 | Henrik Grubbström (Grubba) | | $3->u.sval.u.string);
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | free_node($1);
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $3->u.sval.u.string);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($3);
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | | idents '.' bad_identifier {}
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | | idents '.' error {}
|
591c0c | 1997-01-19 | Fredrik Hübinette (Hubbe) | | ;
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | inherit_specifier: TOK_IDENTIFIER TOK_COLON_COLON
{
|
885388 | 2008-04-26 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | int e = -1;
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | |
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | inherit_state = Pike_compiler;
|
0ee38f | 2002-05-11 | Martin Stjernholm | | for (inherit_depth = 0;; inherit_depth++, inherit_state = inherit_state->previous) {
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | int inh = find_inherit(inherit_state->new_program, $1->u.sval.u.string);
if (inh) {
e = inh;
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | break;
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | }
|
885388 | 2008-04-26 | Henrik Grubbström (Grubba) | | if (inherit_depth == c->compilation_depth) break;
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | if (!TEST_COMPAT (7, 2) &&
ID_FROM_INT (inherit_state->previous->new_program,
|
ddd996 | 2008-04-06 | Henrik Grubbström (Grubba) | | inherit_state->parent_identifier)->name ==
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | $1->u.sval.u.string) {
e = 0;
break;
}
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | }
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | if (e == -1) {
if (TEST_COMPAT (7, 2))
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("No such inherit %S.", $1->u.sval.u.string);
|
e5674c | 2002-06-07 | Martin Stjernholm | | else {
if ($1->u.sval.u.string == this_program_string) {
inherit_state = Pike_compiler;
inherit_depth = 0;
e = 0;
}
else
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("No inherit or surrounding class %S.",
$1->u.sval.u.string);
|
e5674c | 2002-06-07 | Martin Stjernholm | | }
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | }
free_node($1);
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | $$ = e;
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | }
|
360436 | 2002-05-05 | Martin Stjernholm | | | TOK_GLOBAL TOK_COLON_COLON
{
|
885388 | 2008-04-26 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
|
360436 | 2002-05-05 | Martin Stjernholm | | inherit_state = Pike_compiler;
|
885388 | 2008-04-26 | Henrik Grubbström (Grubba) | | for (inherit_depth = 0; inherit_depth < c->compilation_depth;
|
360436 | 2002-05-05 | Martin Stjernholm | | inherit_depth++, inherit_state = inherit_state->previous) {}
|
f971aa | 2008-05-30 | Henrik Grubbström (Grubba) | | $$ = -1;
|
360436 | 2002-05-05 | Martin Stjernholm | | }
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | | inherit_specifier TOK_IDENTIFIER TOK_COLON_COLON
{
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | int e = 0;
|
7e6428 | 2008-05-30 | Henrik Grubbström (Grubba) | | if ($1 < 0) {
$1 = 0;
}
|
0b3d0f | 2000-06-26 | Henrik Grubbström (Grubba) | | #if 0
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | /* FIXME: The inherit modifiers aren't kept. */
if (!(inherit_state->new_program->inherits[$1].flags & ID_PRIVATE)) {
|
0b3d0f | 2000-06-26 | Henrik Grubbström (Grubba) | | #endif /* 0 */
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | e = find_inherit(inherit_state->new_program->inherits[$1].prog,
$2->u.sval.u.string);
|
0b3d0f | 2000-06-26 | Henrik Grubbström (Grubba) | | #if 0
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | }
|
0b3d0f | 2000-06-26 | Henrik Grubbström (Grubba) | | #endif /* 0 */
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | if (!e) {
if (inherit_state->new_program->inherits[$1].name) {
my_yyerror("No such inherit %S::%S.",
inherit_state->new_program->inherits[$1].name,
$2->u.sval.u.string);
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | } else {
|
a2f423 | 2008-05-30 | Henrik Grubbström (Grubba) | | my_yyerror("No such inherit %S.", $2->u.sval.u.string);
}
$$ = -1;
} else {
/* We know stuff about the inherit structure... */
|
7e6428 | 2008-05-30 | Henrik Grubbström (Grubba) | | $$ = e + $1;
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | }
free_node($2);
}
|
91b0d9 | 2002-05-05 | Martin Stjernholm | | | inherit_specifier bad_identifier TOK_COLON_COLON { $$ = -1; }
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | ;
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | low_idents: TOK_IDENTIFIER
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $1->u.sval.u.string);
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(($$=lexical_islocal(Pike_compiler->last_identifier)))
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | /* done, nothing to do here */
|
0ee38f | 2002-05-11 | Martin Stjernholm | | }else if(!($$=find_module_identifier(Pike_compiler->last_identifier,1)) &&
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | !($$ = program_magic_identifier (Pike_compiler, 0, -1,
|
0ee38f | 2002-05-11 | Martin Stjernholm | | Pike_compiler->last_identifier, 0))) {
|
cd2be3 | 2004-03-13 | Henrik Grubbström (Grubba) | | if((Pike_compiler->flags & COMPILATION_FORCE_RESOLVE) ||
|
4eab66 | 2004-03-17 | Henrik Grubbström (Grubba) | | (Pike_compiler->compiler_pass==2)) {
|
ce060e | 2004-06-30 | Martin Nilsson | | my_yyerror("Undefined identifier %S.",
Pike_compiler->last_identifier);
|
4eab66 | 2004-03-17 | Henrik Grubbström (Grubba) | | /* FIXME: Add this identifier as a constant in the current program to
* avoid multiple reporting of the same identifier.
* NOTE: This should then only be done in the second pass.
*/
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | $$=0;
|
97358e | 1998-04-23 | Fredrik Hübinette (Hubbe) | | }else{
|
f23f06 | 2004-03-12 | Henrik Grubbström (Grubba) | | $$=mknode(F_UNDEFINED,0,0);
|
dffa01 | 1997-01-15 | Fredrik Hübinette (Hubbe) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($1);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
bbd892 | 2011-07-07 | Henrik Grubbström (Grubba) | | | '.' TOK_IDENTIFIER
{
struct pike_string *dot;
MAKE_CONST_STRING(dot, ".");
if (call_handle_import(dot)) {
node *tmp=mkconstantsvaluenode(Pike_sp-1);
pop_stack();
$$=index_node(tmp, ".", $2->u.sval.u.string);
free_node(tmp);
}
else
$$=mknewintnode(0);
if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $2->u.sval.u.string);
free_node($2);
}
| TOK_GLOBAL '.' TOK_IDENTIFIER
{
$$ = resolve_identifier ($3->u.sval.u.string);
if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $3->u.sval.u.string);
free_node ($3);
}
|
32bc32 | 2008-06-18 | Henrik Grubbström (Grubba) | | | TOK_RESERVED
{
ref_push_string($1->u.sval.u.string);
low_yyreport(REPORT_ERROR, NULL, 0, parser_system_string,
1, "Unknown reserved symbol %s.");
free_node($1);
$$ = 0;
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PREDEF TOK_COLON_COLON TOK_IDENTIFIER
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
4d889f | 2008-04-25 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
|
45e8a8 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | node *tmp2;
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | |
|
4d889f | 2008-04-25 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier)
free_string(Pike_compiler->last_identifier);
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | copy_shared_string(Pike_compiler->last_identifier, $3->u.sval.u.string);
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | |
|
4d889f | 2008-04-25 | Henrik Grubbström (Grubba) | | tmp2 = mkconstantsvaluenode(&c->default_module);
$$ = index_node(tmp2, "predef", $3->u.sval.u.string);
|
43fc17 | 1999-09-19 | Fredrik Hübinette (Hubbe) | | if(!$$->name)
add_ref( $$->name=$3->u.sval.u.string );
|
45e8a8 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | free_node(tmp2);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($3);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PREDEF TOK_COLON_COLON bad_identifier
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | | TOK_VERSION TOK_COLON_COLON TOK_IDENTIFIER
{
|
4d889f | 2008-04-25 | Henrik Grubbström (Grubba) | | struct compilation *c = THIS_COMPILATION;
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | int old_major = Pike_compiler->compat_major;
int old_minor = Pike_compiler->compat_minor;
|
cd4858 | 2006-01-26 | Henrik Grubbström (Grubba) | | struct svalue *efun = NULL;
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | |
change_compiler_compatibility($1->u.integer.a, $1->u.integer.b);
if(Pike_compiler->last_identifier)
free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $3->u.sval.u.string);
|
cd4858 | 2006-01-26 | Henrik Grubbström (Grubba) | |
/* Check predef:: first, and then the modules. */
|
0b8f81 | 2008-06-24 | Martin Stjernholm | |
$$ = 0;
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | if (TYPEOF(c->default_module) == T_MAPPING) {
|
0b8f81 | 2008-06-24 | Martin Stjernholm | | if ((efun = low_mapping_lookup(c->default_module.u.mapping,
&($3->u.sval))))
$$ = mkconstantsvaluenode(efun);
}
|
017b57 | 2011-10-28 | Henrik Grubbström (Grubba) | | else if (TYPEOF(c->default_module) != T_INT) {
|
0b8f81 | 2008-06-24 | Martin Stjernholm | | JMP_BUF tmp;
if (SETJMP (tmp))
handle_compile_exception ("Couldn't index %d.%d "
"default module with %O.",
$1->u.integer.a, $1->u.integer.b,
&$3->u.sval);
else {
push_svalue (&c->default_module);
push_svalue (&$3->u.sval);
f_index (2);
if (!IS_UNDEFINED (Pike_sp - 1))
$$ = mkconstantsvaluenode (Pike_sp - 1);
pop_stack();
}
UNSETJMP(tmp);
}
if (!$$ && !($$ = resolve_identifier(Pike_compiler->last_identifier))) {
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | if((Pike_compiler->flags & COMPILATION_FORCE_RESOLVE) ||
(Pike_compiler->compiler_pass==2)) {
my_yyerror("Undefined identifier %d.%d::%S.",
$1->u.integer.a, $1->u.integer.b,
Pike_compiler->last_identifier);
$$=0;
}else{
$$=mknode(F_UNDEFINED,0,0);
}
}
|
0b8f81 | 2008-06-24 | Martin Stjernholm | |
|
a0af02 | 2006-01-21 | Henrik Grubbström (Grubba) | | change_compiler_compatibility(old_major, old_minor);
free_node($1);
free_node($3);
}
| TOK_VERSION TOK_COLON_COLON bad_identifier
{
free_node($1);
$$=0;
}
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | | inherit_specifier TOK_IDENTIFIER
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | int id;
|
fae37d | 1998-08-30 | Henrik Grubbström (Grubba) | |
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $2->u.sval.u.string);
|
a005eb | 1999-03-04 | Fredrik Hübinette (Hubbe) | |
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | if ($1 > 0)
id = low_reference_inherited_identifier(inherit_state,
$1,
Pike_compiler->last_identifier,
|
653093 | 2008-06-29 | Martin Nilsson | | SEE_PROTECTED);
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | else
id = really_low_find_shared_string_identifier(Pike_compiler->last_identifier,
inherit_state->new_program,
|
653093 | 2008-06-29 | Martin Nilsson | | SEE_PROTECTED|SEE_PRIVATE);
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | |
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | if (id != -1) {
if (inherit_depth > 0) {
$$ = mkexternalnode(inherit_state->new_program, id);
} else {
$$ = mkidentifiernode(id);
|
0ee38f | 2002-05-11 | Martin Stjernholm | | }
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | } else if (($$ = program_magic_identifier (inherit_state, inherit_depth, $1,
Pike_compiler->last_identifier, 1))) {
/* All done. */
}
else {
if ((Pike_compiler->flags & COMPILATION_FORCE_RESOLVE) ||
(Pike_compiler->compiler_pass == 2)) {
if (($1 >= 0) && inherit_state->new_program->inherits[$1].name) {
my_yyerror("Undefined identifier %S::%S.",
inherit_state->new_program->inherits[$1].name,
Pike_compiler->last_identifier);
} else {
my_yyerror("Undefined identifier %S.",
Pike_compiler->last_identifier);
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | }
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | $$=0;
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | }
|
388e5d | 2008-05-30 | Henrik Grubbström (Grubba) | | else
$$=mknode(F_UNDEFINED,0,0);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
82e1b7 | 2000-06-22 | Henrik Grubbström (Grubba) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
8c6423 | 2000-06-26 | Henrik Grubbström (Grubba) | | | inherit_specifier bad_identifier { $$=0; }
| inherit_specifier error { $$=0; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_COLON_COLON TOK_IDENTIFIER
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
int e,i;
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | if(Pike_compiler->last_identifier) free_string(Pike_compiler->last_identifier);
copy_shared_string(Pike_compiler->last_identifier, $2->u.sval.u.string);
|
fae37d | 1998-08-30 | Henrik Grubbström (Grubba) | |
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | $$=0;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | for(e=1;e<(int)Pike_compiler->new_program->num_inherits;e++)
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if(Pike_compiler->new_program->inherits[e].inherit_level!=1) continue;
|
653093 | 2008-06-29 | Martin Nilsson | | i=low_reference_inherited_identifier(0,e,$2->u.sval.u.string,SEE_PROTECTED);
|
45e8a8 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if(i==-1) continue;
if($$)
{
$$=mknode(F_ARG_LIST,$$,mkidentifiernode(i));
}else{
$$=mkidentifiernode(i);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
if(!$$)
{
|
0ee38f | 2002-05-11 | Martin Stjernholm | | if (!($$ = program_magic_identifier (Pike_compiler, 0, -1,
$2->u.sval.u.string, 1)))
|
2756c1 | 2002-11-27 | Henrik Grubbström (Grubba) | | {
if (Pike_compiler->compiler_pass == 2) {
|
1e5c29 | 2002-12-02 | Henrik Grubbström (Grubba) | | if (TEST_COMPAT(7,2)) {
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | yywarning("Undefined identifier ::%S.", $2->u.sval.u.string);
|
1e5c29 | 2002-12-02 | Henrik Grubbström (Grubba) | | } else {
|
2c448d | 2004-11-05 | Henrik Grubbström (Grubba) | | my_yyerror("Undefined identifier ::%S.", $2->u.sval.u.string);
|
1e5c29 | 2002-12-02 | Henrik Grubbström (Grubba) | | }
|
2756c1 | 2002-11-27 | Henrik Grubbström (Grubba) | | }
|
0ee38f | 2002-05-11 | Martin Stjernholm | | $$=mkintnode(0);
|
2756c1 | 2002-11-27 | Henrik Grubbström (Grubba) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }else{
|
45e8a8 | 1997-01-26 | Fredrik Hübinette (Hubbe) | | if($$->token==F_ARG_LIST) $$=mkefuncallnode("aggregate",$$);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_COLON_COLON bad_identifier
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
408a1e | 2004-10-30 | Martin Stjernholm | | range_bound:
/* empty */
{$$ = mknode (F_RANGE_OPEN, NULL, NULL);}
|
55356e | 1999-05-26 | Fredrik Hübinette (Hubbe) | | | comma_expr
|
408a1e | 2004-10-30 | Martin Stjernholm | | {$$ = mknode (F_RANGE_FROM_BEG, $1, NULL);}
| '<' comma_expr
{$$ = mknode (F_RANGE_FROM_END, $2, NULL);}
| TOK_LEX_EOF
{
yyerror("Unexpected end of file.");
$$ = mknode (F_RANGE_OPEN, NULL, NULL);
}
| '<' TOK_LEX_EOF
{
yyerror("Unexpected end of file.");
$$ = mknode (F_RANGE_OPEN, NULL, NULL);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | gauge: TOK_GAUGE catch_arg
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | {
|
47f976 | 2003-02-08 | Martin Stjernholm | | $$=mkopernode("`/",
mkopernode("`-",
mkopernode("`-",
mkefuncallnode("gethrvtime",
mkintnode(1)),
|
c0637b | 2001-06-25 | Henrik Grubbström (Grubba) | | mknode(F_COMMA_EXPR,
mknode(F_POP_VALUE, $2, NULL),
|
47f976 | 2003-02-08 | Martin Stjernholm | | mkefuncallnode("gethrvtime",
mkintnode(1)))),
NULL),
mkfloatnode((FLOAT_TYPE)1e9));
|
4868db | 1997-05-07 | Per Hedbor | | };
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | typeof: TOK_TYPEOF '(' expr0 ')'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *t;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | node *tmp;
|
3d7882 | 1999-11-06 | Henrik Grubbström (Grubba) | |
/* FIXME: Why build the node at all? */
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | | /* Because the optimizer cannot optimize the root node of the
* tree properly -Hubbe
*/
|
b98c61 | 2000-05-17 | Henrik Grubbström (Grubba) | | tmp=mknode(F_COMMA_EXPR, $3, 0);
|
71bde8 | 2001-03-16 | Fredrik Hübinette (Hubbe) | | optimize_node(tmp);
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | |
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | t=(tmp && CAR(tmp) && CAR(tmp)->type ? CAR(tmp)->type : mixed_type_string);
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | | if(TEST_COMPAT(7,0))
{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *s=describe_type(t);
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | | $$ = mkstrnode(s);
free_string(s);
}else{
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | $$ = mktypenode(t);
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | | }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | free_node(tmp);
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_TYPEOF '(' error ')' { $$=0; yyerrok; }
| TOK_TYPEOF '(' error '}' { $$=0; yyerror("Missing ')'."); }
| TOK_TYPEOF '(' error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0; yyerror("Missing ')'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_TYPEOF '(' error ';' { $$=0; yyerror("Missing ')'."); }
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | ;
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | catch_arg: '(' comma_expr ')' { $$=$2; }
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | | '(' error ')' { $$=0; yyerrok; }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | '(' error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0; yyerror("Missing ')'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | | '(' error '}' { $$=0; yyerror("Missing ')'."); }
| '(' error ';' { $$=0; yyerror("Missing ')'."); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | | block
|
4cb7d9 | 1999-12-10 | Henrik Grubbström (Grubba) | | | error { $$=0; yyerror("Bad expression for catch."); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | catch: TOK_CATCH
|
964949 | 1998-02-27 | Fredrik Hübinette (Hubbe) | | {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->catch_level++;
|
964949 | 1998-02-27 | Fredrik Hübinette (Hubbe) | | }
catch_arg
{
$$=mknode(F_CATCH,$3,NULL);
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | Pike_compiler->catch_level--;
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | }
;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | sscanf: TOK_SSCANF '(' expr0 ',' expr0 lvalue_list ')'
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | if ($6 && !(THIS_COMPILATION->lex.pragmas & ID_STRICT_TYPES)) {
|
a23d57 | 2008-01-07 | Henrik Grubbström (Grubba) | | mark_lvalues_as_used($6);
}
|
37e413 | 2008-05-17 | Marcus Comstedt | | $$=mknode(F_SSCANF,mknode(':', mkintnode(TEST_COMPAT(7, 6)? SSCANF_FLAG_76_COMPAT : 0), mknode(F_ARG_LIST,$3,$5)),$6);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 ',' expr0 error ')'
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | free_node($3);
free_node($5);
yyerrok;
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 ',' expr0 error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
free_node($5);
yyerror("Missing ')'.");
yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 ',' expr0 error '}'
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
free_node($5);
yyerror("Missing ')'.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 ',' expr0 error ';'
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
free_node($5);
yyerror("Missing ')'.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 error ')'
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
4d2133 | 1998-04-14 | Henrik Grubbström (Grubba) | | free_node($3);
yyerrok;
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
yyerror("Missing ')'.");
yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 error '}'
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
yyerror("Missing ')'.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' expr0 error ';'
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0;
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | free_node($3);
yyerror("Missing ')'.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' error ')' { $$=0; yyerrok; }
| TOK_SSCANF '(' error TOK_LEX_EOF
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | {
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | $$=0; yyerror("Missing ')'.");
|
db271d | 1998-04-27 | Henrik Grubbström (Grubba) | | yyerror("Unexpected end of file.");
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF '(' error '}' { $$=0; yyerror("Missing ')'."); }
| TOK_SSCANF '(' error ';' { $$=0; yyerror("Missing ')'."); }
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
3ddb53 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | lvalue: expr4
|
10fe60 | 2003-10-01 | Martin Stjernholm | | | open_bracket_with_line_info low_lvalue_list ']'
|
019596 | 2004-08-25 | Henrik Grubbström (Grubba) | | {
$$=mknode(F_ARRAY_LVALUE, $2,0);
COPY_LINE_NUMBER_INFO($$, $1);
free_node($1);
}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | type6 TOK_IDENTIFIER
|
3ddb53 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | int id = add_local_name($2->u.sval.u.string,compiler_pop_type(),0);
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | /* Note: Variable intentionally not marked as used. */
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | if (id >= 0)
|
c98166 | 2006-03-02 | Henrik Grubbström (Grubba) | | $$=mklocalnode(id,-1);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | else
$$ = 0;
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | free_node($2);
|
3ddb53 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | /* FIXME: Add production for type6 ==> constant type svalue here? */
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | | bad_expr_ident
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | { $$=mknewintnode(0); }
|
39245b | 1998-04-17 | Henrik Grubbström (Grubba) | | ;
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | |
low_lvalue_list: lvalue lvalue_list
{
$$=mknode(F_LVALUE_LIST,$1,$2);
}
|
2a3269 | 1998-01-31 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | lvalue_list: /* empty */ { $$ = 0; }
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | | ',' lvalue lvalue_list
{
$$ = mknode(F_LVALUE_LIST,$2,$3);
}
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | ;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | |
|
9aee97 | 2008-05-06 | Henrik Grubbström (Grubba) | | string_segment: TOK_STRING
| TOK_FUNCTION_NAME
{
struct compiler_frame *f = Pike_compiler->compiler_frame;
|
ff0232 | 2008-05-07 | Henrik Grubbström (Grubba) | | if (!f || (f->current_function_number < 0)) {
$$ = mkstrnode(lfun_strings[LFUN___INIT]);
|
9aee97 | 2008-05-06 | Henrik Grubbström (Grubba) | | } else {
struct identifier *id =
ID_FROM_INT(Pike_compiler->new_program, f->current_function_number);
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | if (!id->name->size_shift) {
int len;
if ((len = strlen(id->name->str)) == id->name->len) {
/* Most common case. */
$$ = mkstrnode(id->name);
} else {
struct pike_string *str =
make_shared_binary_string(id->name->str, len);
$$ = mkstrnode(str);
free_string(str);
}
} else {
struct pike_string *str;
struct array *split;
MAKE_CONST_STRING(str, "\0");
split = explode(id->name, str);
$$ = mkstrnode(split->item->u.string);
free_array(split);
}
|
9aee97 | 2008-05-06 | Henrik Grubbström (Grubba) | | }
}
;
string: string_segment
| string string_segment
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | {
|
3c0c28 | 1998-01-26 | Fredrik Hübinette (Hubbe) | | struct pike_string *a,*b;
copy_shared_string(a,$1->u.sval.u.string);
copy_shared_string(b,$2->u.sval.u.string);
free_node($1);
free_node($2);
a=add_and_free_shared_strings(a,b);
$$=mkstrnode(a);
free_string(a);
|
7e5057 | 1996-11-02 | Fredrik Hübinette (Hubbe) | | }
;
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | /*
* Some error-handling
*/
|
de1d7d | 2000-07-10 | Henrik Grubbström (Grubba) | | /* FIXME: Should probably set Pike_compiler->last_identifier. */
|
1d73ef | 1999-11-23 | Henrik Grubbström (Grubba) | | bad_identifier: bad_expr_ident
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_ARRAY_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("array"); }
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | | TOK_ATTRIBUTE_ID
{ yyerror_reserved("__attribute__"); }
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | | TOK_CLASS
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("class"); }
|
316e7d | 2008-04-04 | Henrik Grubbström (Grubba) | | | TOK_DEPRECATED_ID
{ yyerror_reserved("__deprecated__"); }
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | | TOK_ENUM
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("enum"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_FLOAT_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("float");}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_FUNCTION_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("function");}
|
d31508 | 2008-03-27 | Henrik Grubbström (Grubba) | | | TOK_FUNCTION_NAME
{ yyerror_reserved("__FUNCTION__");}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_INT_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("int"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_MAPPING_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("mapping"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_MIXED_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("mixed"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_MULTISET_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("multiset"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_OBJECT_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("object"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PROGRAM_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("program"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_STRING_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("string"); }
|
5e3aa5 | 2001-04-01 | Henrik Grubbström (Grubba) | | | TOK_TYPEDEF
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("typedef"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_VOID_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("void"); }
|
32bc32 | 2008-06-18 | Henrik Grubbström (Grubba) | | | TOK_RESERVED
{
ref_push_string($1->u.sval.u.string);
low_yyreport(REPORT_ERROR, NULL, 0, parser_system_string,
1, "Unknown reserved symbol %s.");
free_node($1);
}
|
a66319 | 1998-04-17 | Henrik Grubbström (Grubba) | | ;
bad_expr_ident:
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | TOK_INLINE
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("inline"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LOCAL_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("local"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_NO_MASK
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("nomask"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PREDEF
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("predef"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PRIVATE
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("private"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PROTECTED
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("protected"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_PUBLIC
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("public"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_OPTIONAL
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("optional"); }
|
8f733e | 2000-07-12 | Henrik Grubbström (Grubba) | | | TOK_VARIANT
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("variant"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_STATIC
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("static"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_EXTERN
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("extern"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_FINAL_ID
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("final");}
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_DO
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("do"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_ELSE
|
2a7c7c | 1999-07-18 | Fredrik Hübinette (Hubbe) | | { yyerror("else without if."); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_RETURN
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("return"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IMPORT
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("import"); }
|
528fe1 | 2004-10-23 | Martin Nilsson | | | TOK_FACET
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("facet"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_INHERIT
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("inherit"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_CATCH
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("catch"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_GAUGE
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("gauge"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_LAMBDA
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("lambda"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SSCANF
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("sscanf"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_SWITCH
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("switch"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_TYPEOF
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("typeof"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_BREAK
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("break"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_CASE
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("case"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_CONTINUE
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("continue"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_DEFAULT
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("default"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_FOR
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("for"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_FOREACH
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("foreach"); }
|
f76b4c | 2000-05-11 | Henrik Grubbström (Grubba) | | | TOK_IF
|
1fb2de | 2004-10-23 | Martin Nilsson | | { yyerror_reserved("if"); }
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | | ;
|
702ea5 | 2002-10-11 | Henrik Grubbström (Grubba) | | /*
* Kludge for bison 1.50.
*
* Bison 1.50 doesn't support having multiple action blocks
* in a sequence where a block refers to the value of its
* immediate predecessor.
*/
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | |
|
10fe60 | 2003-10-01 | Martin Stjernholm | | /* empty: ; */ /* line_number_info is now used in these cases. */
|
8c77b6 | 1998-04-13 | Henrik Grubbström (Grubba) | |
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | %%
|
2be52d | 2007-11-10 | Martin Nilsson | | static void yyerror_reserved(const char *keyword)
|
1fb2de | 2004-10-23 | Martin Nilsson | | {
|
94d66b | 2008-05-24 | Henrik Grubbström (Grubba) | | my_yyerror("%s is a reserved word.", keyword);
|
1fb2de | 2004-10-23 | Martin Nilsson | | }
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | static struct pike_string *get_new_name(struct pike_string *prefix)
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | {
char buf[40];
/* Generate a name for a global symbol... */
sprintf(buf,"__lambda_%ld_%ld_line_%d",
(long)Pike_compiler->new_program->id,
(long)(Pike_compiler->local_class_counter++ & 0xffffffff), /* OSF/1 cc bug. */
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | (int) THIS_COMPILATION->lex.current_line);
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | if (prefix) {
struct string_builder sb;
init_string_builder_alloc(&sb, prefix->len + strlen(buf) + 1,
prefix->size_shift);
string_builder_shared_strcat(&sb, prefix);
string_builder_putchar(&sb, 0);
string_builder_strcat(&sb, buf);
return finish_string_builder(&sb);
}
|
b2e726 | 2007-09-15 | Henrik Grubbström (Grubba) | | return make_shared_string(buf);
}
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | | static int low_islocal(struct compiler_frame *f,
struct pike_string *str)
{
int e;
for(e=f->current_number_of_locals-1;e>=0;e--)
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | if(f->variable[e].name==str) {
f->variable[e].flags |= LOCAL_VAR_IS_USED;
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | | return e;
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | }
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | | return -1;
}
|
401f2a | 2006-04-02 | Henrik Grubbström (Grubba) | | /* Add a local variable to the current function in frame.
* NOTE: Steals the references to type and def, but not to str.
*/
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | int low_add_local_name(struct compiler_frame *frame,
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_string *str,
struct pike_type *type,
node *def)
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | {
|
ac8715 | 2000-09-25 | Fredrik Hübinette (Hubbe) | |
if (str->len && !TEST_COMPAT(7,0)) {
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | | int tmp=low_islocal(frame,str);
if(tmp>=0 && tmp >= frame->last_block_level)
|
fe8061 | 2000-09-05 | Henrik Grubbström (Grubba) | | {
|
ce060e | 2004-06-30 | Martin Nilsson | | my_yyerror("Duplicate local variable %S, "
"previous declaration on line %d\n",
str, frame->variable[tmp].line);
|
fe8061 | 2000-09-05 | Henrik Grubbström (Grubba) | | }
|
f8a4be | 2000-10-03 | Fredrik Hübinette (Hubbe) | |
if(type == void_type_string)
{
|
ce060e | 2004-06-30 | Martin Nilsson | | my_yyerror("Local variable %S is void.\n", str);
|
f8a4be | 2000-10-03 | Fredrik Hübinette (Hubbe) | | }
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | | }
|
a566ca | 1999-12-14 | Fredrik Hübinette (Hubbe) | | debug_malloc_touch(def);
debug_malloc_touch(type);
|
ef9a24 | 2006-07-06 | Henrik Grubbström (Grubba) | | debug_malloc_touch(str);
|
05ae7d | 2006-03-01 | Henrik Grubbström (Grubba) | | /* NOTE: The number of locals can be 0..255 (not 256), due to
* the use of READ_INCR_BYTE() in apply_low.h.
*/
if (frame->current_number_of_locals == MAX_LOCAL-1)
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | {
|
401f2a | 2006-04-02 | Henrik Grubbström (Grubba) | | my_yyerror("Too many local variables: no space for local variable %S.",
str);
free_type(type);
if (def) free_node(def);
|
abdfb6 | 2002-09-28 | Martin Stjernholm | | return -1;
|
401f2a | 2006-04-02 | Henrik Grubbström (Grubba) | | } else {
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | int var = frame->current_number_of_locals;
|
498ec1 | 1999-11-12 | Henrik Grubbström (Grubba) | | #ifdef PIKE_DEBUG
check_type_string(type);
#endif /* PIKE_DEBUG */
|
df13b7 | 1999-12-18 | Henrik Grubbström (Grubba) | | if (pike_types_le(type, void_type_string)) {
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | if (Pike_compiler->compiler_pass != 1) {
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | yywarning("Declaring local variable %S with type void "
"(converted to type zero).", str);
|
119124 | 1999-12-18 | Henrik Grubbström (Grubba) | | }
|
d68a07 | 2001-02-20 | Henrik Grubbström (Grubba) | | free_type(type);
|
be6fec | 2001-04-01 | Henrik Grubbström (Grubba) | | copy_pike_type(type, zero_type_string);
|
5fdb4d | 1999-12-18 | Henrik Grubbström (Grubba) | | }
|
1e5c8b | 2008-01-03 | Henrik Grubbström (Grubba) | | frame->variable[var].type = type;
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | frame->variable[var].name = str;
reference_shared_string(str);
frame->variable[var].def = def;
|
e021fe | 2008-04-14 | Henrik Grubbström (Grubba) | | frame->variable[var].line = THIS_COMPILATION->lex.current_line;
copy_shared_string(frame->variable[var].file,
THIS_COMPILATION->lex.current_file);
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | |
|
4d889f | 2008-04-25 | Henrik Grubbström (Grubba) | | if (pike_types_le(void_type_string, type)) {
/* Don't warn about unused voidable variables. */
frame->variable[var].flags = LOCAL_VAR_IS_USED;
} else {
frame->variable[var].flags = 0;
}
|
02a79a | 2000-09-04 | Fredrik Hübinette (Hubbe) | |
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | frame->current_number_of_locals++;
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | if(frame->current_number_of_locals > frame->max_number_of_locals)
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | {
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | frame->max_number_of_locals = frame->current_number_of_locals;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | }
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
|
2c8a26 | 2008-01-03 | Henrik Grubbström (Grubba) | | return var;
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | }
}
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | |
/* argument must be a shared string */
/* Note that this function eats a reference to 'type' */
/* If def is nonzero, it also eats a ref to def */
int add_local_name(struct pike_string *str,
|
369940 | 2001-02-20 | Henrik Grubbström (Grubba) | | struct pike_type *type,
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | node *def)
{
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | return low_add_local_name(Pike_compiler->compiler_frame,
|
97f628 | 2000-03-07 | Fredrik Hübinette (Hubbe) | | str,
type,
def);
}
|
a23d57 | 2008-01-07 | Henrik Grubbström (Grubba) | | /* Mark local variables declared in a multi-assign or sscanf expression
* as used. */
|
6572be | 2008-01-05 | Henrik Grubbström (Grubba) | | static void mark_lvalues_as_used(node *n)
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | {
while (n && n->token == F_LVALUE_LIST) {
|
3424a6 | 2008-06-12 | Henrik Grubbström (Grubba) | | if (!CAR(n)) {
/* Can happen if a variable hasn't been declared. */
} else if (CAR(n)->token == F_ARRAY_LVALUE) {
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | mark_lvalues_as_used(CAAR(n));
} else if ((CAR(n)->token == F_LOCAL) && !(CAR(n)->u.integer.b)) {
|
c4e78f | 2008-01-05 | Henrik Grubbström (Grubba) | | Pike_compiler->compiler_frame->variable[CAR(n)->u.integer.a].flags |=
|
147cb7 | 2008-01-05 | Henrik Grubbström (Grubba) | | LOCAL_VAR_IS_USED;
}
n = CDR(n);
}
}
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | #if 0
/* Note that this function eats a reference to each of
* 'type' and 'initializer', but not to 'name'.
* Note also that 'initializer' may be NULL.
*/
|
30c061 | 2008-06-29 | Martin Stjernholm | | static node *add_protected_variable(struct pike_string *name,
struct pike_type *type,
int depth,
node *initializer)
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | {
struct compiler_frame *f = Pike_compiler->compiler_frame;
int i;
int id;
node *n = NULL;
if (initializer) {
/* FIXME: We need to pop levels off local and external variables here. */
}
for(i = depth; f && i; i--) {
f->lexical_scope |= SCOPE_SCOPED;
f = f->previous;
}
if (!f) {
int parent_depth = i;
struct program_state *p = Pike_compiler;
struct pike_string *tmp_name;
while (i--) {
if (!p->previous) {
|
30c061 | 2008-06-29 | Martin Stjernholm | | my_yyerror("Too many levels of protected (%d, max:%d).",
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | depth, depth - (i+1));
parent_depth -= i+1;
break;
}
p->new_program->flags |= PROGRAM_USES_PARENT;
p = p->previous;
}
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | tmp_name = get_new_name(name);
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | id = define_parent_variable(p, tmp_name, type,
|
30c061 | 2008-06-29 | Martin Stjernholm | | ID_PROTECTED|ID_PRIVATE|ID_INLINE);
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | free_string(tmp_name);
if (id >= 0) {
if (def) {
p->init_node =
mknode(F_COMMA_EXPR, Pike_compiler->init_node,
mkcastnode(void_type_string,
mknode(F_ASSIGN, initializer,
mkidentifiernode(id))));
initializer = NULL;
}
n = mkexternalnode(id, parent_depth);
}
} else if (depth) {
f->lexical_scope|=SCOPE_SCOPE_USED;
|
28b736 | 2008-07-08 | Henrik Grubbström (Grubba) | | tmp_name = get_new_name(name);
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | id = low_add_local_name(f, tmp_name, type, NULL);
free_string(tmp_name);
if(f->min_number_of_locals < id+1)
f->min_number_of_locals = id+1;
if (initializer) {
/* FIXME! */
|
30c061 | 2008-06-29 | Martin Stjernholm | | yyerror("Initializers not yet supported for protected variables with function scope.");
|
008035 | 2007-09-16 | Henrik Grubbström (Grubba) | | }
n = mklocalnode(id, depth);
}
id = add_local_name(name, type, n);
if (id >= 0) {
if (initializer) {
return mknode(F_ASSIGN, initializer, mklocalnode(id,0));
}
return mklocalnode(id, 0);
}
if (initializer) {
free_node(initializer);
}
return NULL;
}
#endif /* 0 */
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | int islocal(struct pike_string *str)
{
|
120d84 | 2000-11-08 | Fredrik Hübinette (Hubbe) | | return low_islocal(Pike_compiler->compiler_frame, str);
|
215bed | 1996-09-28 | Fredrik Hübinette (Hubbe) | | }
|
61e9a0 | 1998-01-25 | Fredrik Hübinette (Hubbe) | |
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | | /* argument must be a shared string */
static node *lexical_islocal(struct pike_string *str)
{
int e,depth=0;
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | struct compiler_frame *f=Pike_compiler->compiler_frame;
|
421801 | 1999-01-31 | Fredrik Hübinette (Hubbe) | |
while(1)
{
for(e=f->current_number_of_locals-1;e>=0;e--)
{
if(f->variable[e].name==str)
{
|
bad516 | 2000-06-23 | Fredrik Hübinette (Hubbe) | | struct compiler_frame *q=Pike_compiler->compiler_frame;
|
164d6b | 2001-11-29 | Henrik Grubbström (Grubba) | |
|
2d5f59 | 2008-01-03 | Henrik Grubbström (Grubba) | | f->variable[e].flags |= LOCAL_VAR_IS_USED;
|
421801 | 1999-01-31 |