Skip to content

Commit

Permalink
- Fix for Error.updateCurrentComponent (field isReadOnly was always t…
Browse files Browse the repository at this point in the history
…rue in the externally defined because the field after it, fileName, was never 0)

git-svn-id: https://openmodelica.org/svn/OpenModelica/trunk@7158 f25d12d1-65f4-0310-ae8a-bbce733d8d8e
  • Loading branch information
sjoelund committed Nov 23, 2010
1 parent e4a9e1d commit ebcfe50
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Compiler/runtime/Error_rml.cpp
Expand Up @@ -96,7 +96,7 @@ RML_END_LABEL
RML_BEGIN_LABEL(ErrorExt__updateCurrentComponent)
{
char* newVar = RML_STRINGDATA(rmlA0);
bool write = RML_STRINGDATA(rmlA1);
bool write = RML_UNTAGFIXNUM(rmlA1);
char* fileName = RML_STRINGDATA(rmlA2);
int rs = RML_UNTAGFIXNUM(rmlA3);
int re = RML_UNTAGFIXNUM(rmlA4);
Expand Down
19 changes: 13 additions & 6 deletions Compiler/runtime/systemimpl.c
Expand Up @@ -230,20 +230,27 @@ extern int SystemImpl__regularFileExists(const char* str)
if (sh == INVALID_HANDLE_VALUE) {
return 0;
}
if ((FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0) {
ret_val = 0;
} else {
ret_val = 1;
}
FindClose(sh);
return ret_val;
return (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0);
#else
struct stat buf;
if (stat(str, &buf)) return 0;
return (buf.st_mode & S_IFREG) != 0;
#endif
}

extern int SystemImpl__regularFileWritable(const char* str)
{
FILE *f;
if (!SystemImpl__regularFileExists(str))
return 0;
f = fopen(str, "a");
if (f == NULL)
return 0;
fclose(f);
return 1;
}

static char* SystemImpl__readFile(const char* filename)
{
char* buf;
Expand Down
1 change: 1 addition & 0 deletions Compiler/runtime/systemimpl.h
Expand Up @@ -67,5 +67,6 @@ struct modelica_ptr_s {
typedef struct modelica_ptr_s *modelica_ptr_t;
modelica_ptr_t lookup_ptr(modelica_integer index);

int SystemImpl__regularFileWritable(const char* str);

#endif //__SYSTEMIMPL_H
5 changes: 3 additions & 2 deletions Parser/Modelica.g
Expand Up @@ -94,13 +94,14 @@ goto rule ## func ## Ex; }}
#endif
#define token_to_scon(tok) mk_scon((char*)tok->getText(tok)->chars)
#define NYI(void) fprintf(stderr, "NYI \%s \%s:\%d\n", __FUNCTION__, __FILE__, __LINE__); exit(1);
#define INFO(start) Absyn__INFO(ModelicaParser_filename_RML, isReadOnly, mk_icon(start->line), mk_icon(start->charPosition+1), mk_icon(LT(1)->line), mk_icon(LT(1)->charPosition+1), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
#define INFO(start) Absyn__INFO(ModelicaParser_filename_RML, mk_bcon(isReadOnly), mk_icon(start->line), mk_icon(start->charPosition+1), mk_icon(LT(1)->line), mk_icon(LT(1)->charPosition+1), Absyn__TIMESTAMP(mk_rcon(0),mk_rcon(0)))
typedef struct fileinfo_struct {
int line1;
int line2;
int offset1;
int offset2;
} fileinfo;
extern int isReadOnly;
}

@members
Expand All @@ -109,7 +110,7 @@ goto rule ## func ## Ex; }}
const char* ModelicaParser_filename_C = 0;
int ModelicaParser_readonly = 0;
int ModelicaParser_flags = 0;
void* isReadOnly = RML_FALSE;
int isReadOnly;
void* mk_box_eat_all(int ix, ...) {return NULL;}
double getCurrentTime(void) {
time_t t;
Expand Down
3 changes: 3 additions & 0 deletions Parser/parse.c
Expand Up @@ -49,6 +49,7 @@ extern "C" {

#include "runtime/errorext.h"
#include "runtime/rtopts.h" /* for accept_meta_modelica_grammar() function */
#include "runtime/systemimpl.h"

static long unsigned int szMemoryUsed = 0;
static long lexerFailed;
Expand Down Expand Up @@ -341,6 +342,7 @@ static void* parseFile(const char* fileName, int flags)
/* For some reason we get undefined values if we use the old pointer; but only in rare cases */
ModelicaParser_filename_RML = mk_scon(ModelicaParser_filename_C);
ModelicaParser_flags = flags;
isReadOnly = !SystemImpl__regularFileWritable(ModelicaParser_filename_C);

if (debug) { fprintf(stderr, "Starting parsing of file: %s\n", ModelicaParser_filename_C); }

Expand Down Expand Up @@ -368,6 +370,7 @@ static void* parseString(const char* data, int flags)
ModelicaParser_filename_C = "<interactive>";
ModelicaParser_filename_RML = mk_scon((char*)ModelicaParser_filename_C);
ModelicaParser_flags = flags;
isReadOnly = 1;

if (debug) { fprintf(stderr, "Starting parsing of file: %s\n", ModelicaParser_filename_C); }

Expand Down
2 changes: 1 addition & 1 deletion c_runtime/meta_modelica.h
Expand Up @@ -122,10 +122,10 @@ typedef modelica_metatype mmc_mk_rcon_rettype;
typedef modelica_metatype mmc_mk_scon_rettype;
typedef modelica_metatype mmc_mk_acon_rettype;

mmc_mk_icon_rettype mmc_mk_icon(modelica_integer);
#define MMC_FALSE (mmc_mk_icon(0))
#define MMC_TRUE (mmc_mk_icon(1))
#define mmc_mk_bcon(X) (X != 0 ? MMC_TRUE : MMC_FALSE)
mmc_mk_icon_rettype mmc_mk_icon(int);
mmc_mk_rcon_rettype mmc_mk_rcon(double);
mmc_mk_scon_rettype mmc_mk_scon(const char*);

Expand Down

0 comments on commit ebcfe50

Please sign in to comment.