output.c File Reference

#include "defs.h"
#include "names.h"
#include "output.h"

Include dependency graph for output.c:

Go to the source code of this file.

Defines

#define TRUE   1
#define FALSE   0
#define OPNEG_KLUDGE   (sizeof(opcode_table)/sizeof(table_entry) - 1)
#define cpd(n)   cp->vstg ? cp->Const.cds[n] : dtos(cp->Const.cd[n])

Functions

static void output_arg_list Argdcl ((FILEP, struct Listblock *))
static void output_binary Argdcl ((FILEP, Exprp))
static void output_literal Argdcl ((FILEP, long, Constp))
static void output_prim Argdcl ((FILEP, struct Primblock *))
void expr_out (FILE *fp, expptr e)
void out_and_free_statement (FILE *outfile, expptr expr)
int same_ident (expptr left, expptr right)
static int samefpconst (register Constp c1, register Constp c2, register int n)
static int sameconst (register Constp c1, register Constp c2)
int same_expr (expptr e1, expptr e2)
void out_name (FILE *fp, Namep namep)
void out_const (FILE *fp, register Constp cp)
static void out_args (FILE *fp, expptr ep)
void out_addr (FILE *fp, struct Addrblock *addrp)
static void output_literal (FILE *fp, long memno, Constp cp)
static void output_prim (FILE *fp, struct Primblock *primp)
static void output_arg_list (FILE *fp, struct Listblock *listp)
static void output_unary (FILE *fp, struct Exprblock *e)
static char * findconst (register long m)
static int opconv_fudge (FILE *fp, struct Exprblock *e)
static void output_binary (FILE *fp, struct Exprblock *e)
void out_call (FILE *outfile, int op, int ftype, expptr len, expptr name, expptr args)
char * flconst (char *buf, char *x)
char * dtos (double x)
void out_init (Void)
void extern_out (FILE *fp, Extsym *extsym)
static void output_list (FILE *fp, struct Listblock *listp)
void out_asgoto (FILE *outfile, expptr expr)
void out_if (FILE *outfile, expptr expr)
static void output_rbrace (FILE *outfile, char *s)
void out_else (FILE *outfile)
void elif_out (FILE *outfile, expptr expr)
void endif_out (FILE *outfile)
void end_else_out (FILE *outfile)
void compgoto_out (FILE *outfile, expptr index, expptr labels)
void out_for (FILE *outfile, expptr init, expptr test, expptr inc)
void out_end_for (FILE *outfile)

Variables

char _assoc_table [] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }
table_entry opcode_table []
int dneg
int trapuv
static char opeqable [sizeof(opcode_table)/sizeof(table_entry)]
char tr_tab [Table_size]


Define Documentation

#define cpd ( n   )     cp->vstg ? cp->Const.cds[n] : dtos(cp->Const.cd[n])

Definition at line 463 of file output.c.

Referenced by out_const().

#define FALSE   0

Definition at line 32 of file output.c.

Referenced by __PARAMS(), _BuildLineTable(), _PARAMS(), _XawImInitialize(), _XawImRealize(), _XawImSetValues(), _XawMultiSave(), _XawMultiSourceFreeString(), _XawTextDoReplaceAction(), _XawTextDoSearchAction(), _XawTextPrepareToUpdate(), _XawTextReplace(), _XawTextShowPosition(), _XawTextVScroll(), AboutDlgProc(), ActionAbort(), ActionMove(), ActionNotify(), ActionPage(), ActionSet(), ActionStop(), ActivateTransparencyMode(), AddMenu(), AddSearchChildren(), AddToScilabDllPathEnv(), AllocBotShadowPixmap(), AllocTopShadowPixmap(), AppendHashTableLocalization(), AppendMessageToLog(), AppendModules(), axesplot(), btn_pressed(), BuildWithVS8ExpressF2C(), C2F(), Callback_HELP(), Callback_NEWSCILAB(), Callback_OPEN(), Callback_PASTE(), Callback_PRINT(), Callback_SAVE(), Callback_SCIPAD(), Callback_TOOLBAR(), champg(), ChangeCursorWhenScilabIsReady(), ChangeFormGeometry(), ChangeManaged(), ChangeSize(), CheckDisplay(), checkPolygon(), checkPolygons(), checkRedrawing(), CheckVBarScrolling(), checkXAxes2dTics(), checkYAxes2dTics(), ChooseColorBox(), ChooseDlgProc(), ChooseScilabDlgProc(), CleanBuffers(), CleanClipboard(), ClearAbove(), clearareaPos(), ClearBelow(), ClearCommandWindow(), ClearScreen(), clearwindowXfig(), closeGraphicModule(), closeGraphicSession(), CommandByFileExtension(), ComputeNbSubTics(), ComputeNbSubTicsFor3dUse(), ComputeXIntervals(), ConfigurePrinterDialogBox(), Console_Main(), ConstraintDestroy(), ConstraintSetValues(), ConstructLabel(), ConstructLegend(), ConstructTitle(), conv_10(), conv_fp(), ConvertPathUnixToWindowsFormat(), ConvertPathWindowsToUnixFormat(), ConvertSelection(), CopyAtlas(), CopyPrint(), CopyToClipboardBitmap(), CopyToClipboardEMF(), Create_JVM_Thread_CONSOLE(), CreateButton(), CreateDir(), CreateGC(), CreateGCs(), CreateGraphToolBar(), CreateIC(), CreateIcTable(), CreateLocalFunctionsTab(), CreateScilabConsole(), CvtStringToBlock(), CvtStringToEditMode(), CvtStringToLayout(), CvtStringToResizeMode(), CvtStringToScrollMode(), CvtStringToWrapMode(), DDECloseConnection(), DDEExecute(), DDEOpenConnection(), DDEPoke(), DDERequest(), DecreaseAlphaLevel(), delbtn(), DeleteAKey(), DeleteBackwardChar(), DeleteBackwardWord(), DeleteCurrentSelection(), DeleteForwardChar(), DeleteForwardWord(), DeleteLine(), DestroyAllIM(), DestroyIC(), DestroyMerge(), destroyScilabGetHashTable(), destroyScilabSetHashTable(), DetectFrameWorkNET2(), DialogWindow(), DisableInteractiveMode(), DisableTransparencyMode(), displaynumbersPos(), displaynumbersXfig(), displaystringPos(), displaystringXfig(), DisplayText(), DisplayTextWindow(), Dispose_SciGUIConsole(), DisposeFFTWLibrary(), DisposeModulesInfo(), do_jumpscroll(), do_scrollbar(), do_select_start(), do_softreset(), do_start_extend(), DoExtension(), domenu(), DoReplaceAll(), DoReplaceOne(), DoSearch(), DragFunc(), draw_it(), drawarcPos(), drawarcsPos(), drawarcsXfig(), drawarcsXfig_old(), drawarcXfig(), drawarcXfig_old(), drawarrowsPos(), drawarrowsXfig(), drawaxisPos(), drawaxisXfig(), drawClippedPolylineXfig(), drawlinePos(), drawlineXfig(), drawPolylineEntity(), drawpolylinePos(), drawpolylinesPos(), drawpolylinesXfig(), drawpolylineXfig(), drawpolymarkPos(), drawpolymarkXfig(), drawrectanglePos(), drawrectanglesPos(), drawrectanglesXfig(), drawrectangleXfig(), drawsegmentsPos(), drawsegmentsXfig(), drawSegsEntity(), DrawXGrid(), DrawXSubTics(), DrawXTics(), DrawYGrid(), DrawYSubTics(), DrawYTics(), Events_Loop_SciGUIConsole(), ExistDir(), ExistFunction(), ExistModelicac(), ExistScicos(), ExitWindow(), ExportBMP(), ExportEMF(), ExportStyle(), ExportStyleDlgProc(), ExposeChooseWindow(), ExposePrintdialogWindow(), ExtendSelection(), externaldef(), fec(), FigureToPrint(), FileExist(), FilesAssociationDlgProc(), fillarcPos(), fillarcsPos(), fillarcsXfig(), fillarcsXfig_old(), fillarcXfig(), fillarcXfig_old(), FillArea(), fillpolylinePos(), fillpolylinesPos(), fillpolylinesXfig(), fillpolylineXfig(), fillrectanglePos(), fillrectangleXfig(), FindPosition(), FlushScroll(), ForbiddenToUseScilab(), FormParagraph(), FreeElmsArray(), FreeJVMDll(), FreeVariableStructArray(), FromAlternate(), gdImageCreateFromGif(), GeometryManager(), get_dash_and_color_Pos(), get_dash_and_color_Xfig(), get_dash_or_color_Pos(), get_dash_or_color_Xfig(), get_event_xy(), get_nax_arg(), get_queuename(), get_with_mesh_arg(), getabsourelPos(), getalufunctionPos(), getbackgroundPos(), getbackgroundXfig(), getChampDataBounds(), GetChilds(), getclipPos(), GetCode_(), getcolormapPos(), getcolormapsizePos(), getcolormapsizeXfig(), getcolormapXfig(), GetCommandFromAnotherScilab(), getcursymbolXfig(), getcurwinPos(), GetDLLFilenameAtlas(), GetFileWindow(), getforegroundPos(), getforegroundXfig(), GetGC(), gethidden3dPos(), gethidden3dXfig(), GetInfoCPUfromLine(), GetIsAxes2D(), GetJVMDll(), GetLastJob(), getlastPos(), getNbSubMenus(), getpatternPos(), GetStateToolBarWin32(), getStringBox(), getthicknessPos(), getusecolorPos(), getusecolorXfig(), getversionmodule(), gp_printfile(), GPopupResize(), GradFixedlog(), HandleBellPropertyChange(), HandleFocusChange(), HandleGrip(), HasAZoneTextSelected(), HaveAnotherWindowScilab(), HideGraphToolBar(), HideToolBarWin32(), IncreaseAlphaLevel(), InitAxesModel(), InitCheckBox(), InitFigureModel(), initgraphic(), InitGWStruct(), Initialize(), Initialize_SciGUIConsole_Object(), InitializeCore(), InitializeHashTableScilabErrors(), InitializeHashTableScilabMenus(), InitializeHashTableScilabMessages(), InitializeJVM(), InitializeLocalization(), InitializeTclTk(), initLabel(), InitMWStruct(), InitScreenBuffer(), InitStringOrFile(), initsubwin(), InitTWStruct(), InitWindowGraphDll(), Input(), InputBoxDlgProc(), InsertChild(), InsertFileNamed(), InsertLine(), InsertNewLineAndIndent(), Is_a_correct_function_name(), is_a_valid_size_for_scilab_stack(), is_dead_key(), IsABinOrSavFile(), IsACommand(), IsAFile(), IsAGraphFile(), IsAGraphFilegraph(), IsAGraphFilegraphb(), IsAScicosFile(), IsAScicosFileCOS(), IsAScicosFileCOSF(), IsASpecialKey(), IsCreatedIC(), IsDownAxes(), IsEmptyClipboard(), IsEnabled_SciGUIConsole(), IsEntityPickerMenu(), isFittingInCell(), isGedOpenedOn(), Ishidden(), IsInsideRectangle(), isListCurrentElementEmptyMatrix(), IsLoadedFFTW(), IsRegistered(), isStringParamEqual(), IsTheGoodShell(), IsToThePrompt(), ItemInRectangle(), JVM_Create_SciGUIConsole_Object(), Kill_Scilex(), KillBackwardWord(), KillForwardWord(), KillTimerLeft(), KillTimerMiddle(), KillTimerRight(), KillToEndOfLine(), KillToEndOfParagraph(), LanguageIsOK(), LaunchFilebyExtension(), Layout(), List_free_item_with_check(), Load_primitives_from_file(), LoadArrayCPUFromFile(), LoadFFTWLibrary(), LoadHashTableLocalization(), LoadHashTablesLocalization(), loadlanguagepref_linux(), LoopAndRefigureChildren(), LWZReadByte_(), main(), MAIN__(), MakeSetValuesRequest(), match(), MatDialogProc(), MatrixDialogWindow(), MChoicePage(), MDialogPage(), MessageBoxNewGraphicModeDlgProc(), mouse_moved(), move_shadow(), MoveBackwardParagraph(), MoveBackwardWord(), MoveForwardParagraph(), MoveForwardWord(), MoveLine(), MoveToLineEnd(), MoveToLineStart(), needtochangelanguage(), NoRegistered(), Objarc(), Objdrawaxis(), Objfpoly(), Objmove(), Objplot3d(), Objpoly(), Objrect(), Objsegs(), Objstring(), Objtitle(), ON_ABOUT_WM_COMMAND(), ON_EVENT_GRAPH_WM_LBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_LBUTTONDOWN(), ON_EVENT_GRAPH_WM_LBUTTONUP(), ON_EVENT_GRAPH_WM_MBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_MBUTTONDOWN(), ON_EVENT_GRAPH_WM_MBUTTONUP(), ON_EVENT_GRAPH_WM_MOUSEMOVE(), ON_EVENT_GRAPH_WM_RBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_RBUTTONDOWN(), ON_EVENT_GRAPH_WM_RBUTTONUP(), ON_FILESASSOCIATIONBOX_WM_COMMAND(), ON_MESSAGEBOXNEWGRAPHICMODE_WM_COMMAND(), ON_WND_CONSOLE_WM_DESTROY(), ON_WND_CONSOLE_WM_ENTERSIZEMOVE(), ON_WND_GRAPH_WM_DESTROY(), ON_WND_GRAPH_WM_HSCROLL(), ON_WND_GRAPH_WM_KEY(), ON_WND_GRAPH_WM_SIZE(), ON_WND_GRAPH_WM_VSCROLL(), ON_WND_PARENTGRAPH_WM_DESTROY(), ON_WND_PARENTGRAPH_WM_EXITSIZEMOVE(), ON_WND_TEXT_WM_COMMAND(), ON_WND_TEXT_WM_KEY(), ON_WND_TEXT_WM_KILLFOCUS(), ON_WND_TEXT_WM_LBUTTONUP(), ON_WND_TEXT_WM_MBUTTONUP(), ON_WND_TEXT_WM_SIZE(), OpenSaveSCIFile(), out_call(), pal_setcolormap(), PaneSetValues(), parse_args(), parse_page_string(), plot2dn(), PopdownSearch(), PopPaneStack(), PositionForXY(), PositionMenu(), PreferredSize(), PrintDlgProc(), PrintPs(), PutString(), PutString_SciGUIConsole(), ReadColorMap(), ReadImage(), ReadModulesFile(), ReadRegistryGraph(), ReadRegistryTxt(), Realize(), ReceiveFromAnotherScilab(), Reconnect(), Redisplay(), Register(), RegisterParentWindowClass(), RegisterParentWindowGraphClass(), RegisterTextWindowClass(), RegisterToVendorShell(), RegisterWindowGraphClass(), RemoveCharsFromEOL(), RemoveComments(), RemoveDir(), RemoveHastable_string(), RenameConsole(), repaint_window(), Replace(), ReplacePrompt(), reset_click_counter(), reset_left_click_counter(), reset_middle_click_counter(), reset_right_click_counter(), Resize(), ResizeScreenBuffer(), ResizeVendorShell(), ResizeVendorShell_Core(), Resolve(), ReturnValueSetenv(), RevScroll(), SaveCurrentLine(), savelanguagepref_linux(), SavePs(), Scan(), sci_clc(), sci_drawlater(), sci_fec(), sci_grayplot(), sci_matplot(), sci_move(), sci_plot2d(), sci_plot2d1_G(), sci_raise_window(), sci_set(), sci_update_frame_bounds_2d(), sci_update_frame_bounds_3d(), sci_xarc(), sci_xarcs(), sci_xfarcs(), sci_xget(), sci_xpoly(), sci_xrect(), sci_xrects(), sci_xset(), sci_xstring(), sci_xstringb(), sci_xtitle(), sciAddThisToItsParent(), sciCanBeSonOf(), SciChoiceI(), sciDelThisToItsParent(), SciDialogDlgProc(), sciGetAddPlot(), sciGetAutoPosition(), sciGetAutoRotation(), sciGetAutoScale(), sciGetAutoSize(), sciGetCenterPos(), sciGetdrawmode(), sciGetHighLight(), sciGetIs3d(), sciGetIsFigureIconified(), sciGetIsMark(), sciGetLegendDefined(), sciGetRealVisibility(), sciGetResize(), sciGetXorMode(), sciGetZooming(), sciInitGraphicContext(), sciInitGraphicMode(), sciInitIs3d(), sciIsAreaZoom(), sciIsClicked(), sciIsMergeable(), ScilabGResize(), ScilabPaint(), SciMessageDlgProc(), SciPalette(), SciViewportMove(), sciXclear(), Scroll(), SearchBackwardInHistory(), SearchForwardInHistory(), SelectWord(), SendCommandToAnotherScilab(), SendGraphMacro(), SendInputText(), SendMacroEntityPicker(), SendScilabJobs(), set_auto_clear_property(), set_auto_dimensionning_property(), set_auto_position_property(), set_auto_resize_property(), set_auto_rotation_property(), set_auto_scale_property(), set_auto_ticks_property(), set_axes_reverse_property(), set_axes_visible_property(), set_box_property(), set_color(), set_cube_scaling_property(), set_dash_and_color_Pos(), set_dash_and_color_Xfig(), set_dash_or_color(), set_dash_or_color_Pos(), set_dash_or_color_Xfig(), set_data_bounds_property(), set_fill_mode_property(), set_font_angle_property(), set_handle_visible_property(), Set_HOME_PATH(), set_immediate_drawing_property(), set_interp_color_mode_property(), set_isoview_property(), set_line_mode_property(), set_line_style_Pos(), set_line_style_Xfig(), set_mark_mode_property(), set_menu_enable_property(), set_pattern_or_color(), set_position_property(), Set_SCI_PATH(), Set_Shell(), set_surface_mode_property(), Set_TCL_LIBRARY_PATH(), set_text_box_mode_property(), set_tight_limits_property(), Set_TK_LIBRARY_PATH(), set_view_property(), set_viewport_property(), set_visible_property(), set_x_ticks_property(), set_y_ticks_property(), set_z_ticks_property(), set_zoom_state_property(), setabsourelPos(), setalufunction1Pos(), setalufunction1Xfig(), setalufunctionPos(), setalufunctionXfig(), setclipPos(), setclipXfig(), setcolormapPos(), setcolormapXfig(), setcursymbolXfig(), setcurwinPos(), setdashPos(), setdashXfig(), setenvc(), setenvtcl(), SetFocus(), SetFocusValues(), setgccolormapPos(), setgccolormapXfig(), sethidden3dPos(), sethidden3dXfig(), SetICFocus(), SetICValues(), SetIhmSystemDefaultTextBackgroundColor(), SetIhmSystemDefaultTextColor(), SetIhmTextBackgroundColor(), SetIhmTextColor(), setlanguage(), setlanguagecode(), SetLastJob(), setpatternPos(), SetResourceByName(), setSCIHOME(), setSubWinAngles(), SetTabs(), setthicknessPos(), settmpdir(), SetUnsetMenu(), SetValues(), SetValuesHook(), SetVarAString(), SetVariablesStructs(), SetVarMatrix(), SetVarScalar(), SetVarStrings(), setwindowdim(), SetWITH_GUI(), setwresize(), SortStrings(), SortVarsStructByStrings(), squash_spaces(), StartJVM_CONSOLE(), StartJVMs(), StartScilab(), strflag2axes_properties(), StripOutOldCRs(), SwitchBufs(), systemc(), TCL_ArrayDim(), TCL_ArrayExist(), Terminate_JVM_Thread_CONSOLE(), TerminateJVM_CONSOLE(), TerminateJVMs(), TerminateScilab(), TestRegistryKey(), TextFocusOut(), TextGetCh(), TextInit(), tic(), ToolBarWin32(), TranslateExposeRegion(), TryNewLayout(), Unset(), unsetclipPos(), unsetclipXfig(), UnsetICFocus(), update_specification_bounds(), UpdateAKey(), UpdateFileGraphNameMenu(), UpdateFileNameMenu(), UpdateMark(), updateMerge(), UpdateSubwinScale(), UpdateTextInLine(), usecolorPos(), usecolorXfig(), VerifyModule(), VJump(), VTInitialize(), VTRealize(), VTReset(), VTSetValues(), Windows_Main(), WindowScroll(), WindowsQueryRegistry(), WindowsQueryRegistryList(), WindowsQueryRegistryNumberOfElementsInList(), WinMain(), with_module(), write_history(), WriteColorRGB(), WriteIntoKeyBuffer(), WriteIntoScilab(), WriteTextThread(), WriteToFile(), XawAsciiSave(), XawAsciiSourceFreeString(), XawTreeForceLayout(), XawVendorShellClassPartInit(), XawVendorShellExtSetValues(), XawVendorShellSetValues(), xdialg(), xdialg1(), XDPi2R(), xendgraphicPos(), xendgraphicXfig(), xgetfile(), xgetfontXfig(), XGradPosition(), xgray(), xgray1(), XLogScale(), xmatdg(), xmdial(), XmuInternStrings(), XPi2R(), XScale(), xsetfontXfig(), xsetg(), YDPi2R(), YGradPosition(), YLogScale(), YPi2R(), zoom_box(), and zzledt().

#define OPNEG_KLUDGE   (sizeof(opcode_table)/sizeof(table_entry) - 1)

Definition at line 127 of file output.c.

Referenced by output_unary().

#define TRUE   1

Definition at line 29 of file output.c.

Referenced by __PARAMS(), _BuildLineTable(), _DeleteOrKill(), _PARAMS(), _SelectionReceived(), _XawImSetFocusValues(), _XawMultiSave(), _XawTextAlterSelection(), _XawTextBuildLineTable(), _XawTextCheckResize(), _XawTextDoReplaceAction(), _XawTextDoSearchAction(), _XawTextReplace(), _XawTextSetField(), _XawTextSetScrollBars(), _XawTextShowPosition(), AboutDlgProc(), ActionPage(), ActionSet(), ActionStart(), ActivateTransparencyMode(), AdaptGraduationsOnXBottomLeft(), AdaptGraduationsOnXBottomRight(), AdaptGraduationsOnYBottomLeft(), AdaptGraduationsOnYBottomRight(), AdaptGraduationsOnZ(), AddInsertFileChildren(), AddSearchChildren(), allocateText(), AllocBotShadowPixmap(), AllocTopShadowPixmap(), AppendHashTableLocalization(), AppendMessageToLog(), arg_verify(), AutoFill(), axesplot(), Bell(), btn_pressed(), btn_released(), BuildWithVS8ExpressF2C(), C2F(), Callback_BACKGROUNDCOLOR(), Callback_CLEARCOMMANDWINDOW(), Callback_CLEARHISTORY(), Callback_EXEC(), Callback_GETF(), Callback_LOAD(), Callback_MCOPY(), Callback_OPEN(), Callback_RESTART(), Callback_SAVE(), Callback_SELECTALL(), Callback_TEXTCOLOR(), champg(), ChangeFormGeometry(), ChangeManaged(), CheckDisplay(), checkPolygon(), checkPolygons(), checkRedrawing(), checkXAxes2dTics(), checkYAxes2dTics(), ChooseColorBox(), ChooseDlgProc(), ChoosePaneToResize(), ChooseScilabBox(), ChooseScilabDlgProc(), CleanBuffers(), ClearCommandWindow(), ClearLinesScreenConsole(), ClearMark(), CommandByFileExtension(), ComputeXIntervals(), ConfigurePrinterDialogBox(), Console_Main(), ConstructArc(), ConstructCompound(), ConstructCompoundSeq(), ConstructFec(), ConstructGrayplot(), ConstructLabel(), ConstructLegend(), ConstructPolyline(), ConstructRectangle(), ConstructSegs(), ConstructSurface(), ConstructTitle(), ConstructUimenu(), ConvertPathUnixToWindowsFormat(), ConvertPathWindowsToUnixFormat(), ConvertSelection(), CopyAtlas(), CopyPrint(), CopyToClipboardBitmap(), CopyToClipboardEMF(), Create_JVM_Thread_CONSOLE(), CreateButton(), CreateDialog(), CreateDir(), CreateGraphToolBar(), CreateLocalFunctionsTab(), CreatePrettyGradsFromNax(), createScilabGetHashTable(), createScilabSetHashTable(), CvtStringToBlock(), CvtStringToEditMode(), CvtStringToLayout(), CvtStringToResizeMode(), CvtStringToScrollMode(), CvtStringToWrapMode(), DDECloseConnection(), DDEExecute(), DDEOpenConnection(), DDEPoke(), DDERequest(), DeleteAKey(), DeleteBackwardChar(), DeleteForwardChar(), DetectFrameWorkNET2(), DialogWindow(), DisableTransparencyMode(), DisplayText(), Dispose_SciGUIConsole(), DisposeFFTWLibrary(), DispStringAngle(), do_clearsavedlines(), do_hardreset(), do_jumpscroll(), do_xxprintf(), do_xxscanf(), domenu(), DoReplaceOne(), DoSearch(), draw_it(), DrawMerge3d(), drawPolylineEntity(), Events_Loop_SciGUIConsole(), ExistDir(), ExistFunction(), ExistScicos(), ExportBMP(), ExportEMF(), ExportStyle(), ExportStyleDlgProc(), ExposeChooseWindow(), ExposePrintdialogWindow(), externaldef(), fac3dn(), fec(), FigureToPrint(), FileExist(), FileInit(), FileInitFromScreenPos(), FileInitFromScreenXfig(), FileInitXfig(), FilesAssociationDlgProc(), FindPosition(), ForbiddenToUseScilab(), FormRegion(), FreeElmsArray(), FreeJVMDll(), FreeVariableStructArray(), Gen3DPoints(), GeometryManager(), get_event_xy(), get_nax_arg(), get_queuename(), GetChilds(), GetCode_(), GetCommandFromAnotherScilab(), GetDLLFilenameAtlas(), GetEventKeyboardAndMouse(), GetFileWindow(), GetHandleVisibilityOnUimenu(), GetInfoCPUfromLine(), GetIsAxes2D(), GetJVMDll(), GetLastJob(), GetStringRaw(), getversionmodule(), GetXPosButton(), gp_printfile(), GPopupResize(), GradFixedlog(), graphicsmodels(), GraySquare1_NGreverse(), HasAZoneTextSelected(), HaveAnotherWindowScilab(), HideToolBar(), HideToolBarWin32(), Highlight(), I3dRotation(), IncreaseAlphaLevel(), InitAxesModel(), InitCheckBox(), InitFigureModel(), initgraphic(), Initialize(), Initialize_SciGUIConsole_Object(), InitializeHashTableScilabErrors(), InitializeHashTableScilabMenus(), InitializeHashTableScilabMessages(), InitializeLocalization(), InitializeSearchWidget(), initLabel(), InitScreenBuffer(), InitStringOrFile(), Input(), InputBoxDlgProc(), InsertChar(), InsertChild(), InsertFileNamed(), InsertNewCRs(), InsertNewLineAndIndent(), InsertString(), int_error(), inter(), Is_a_correct_function_name(), is_a_valid_size_for_scilab_stack(), is_dead_key(), IsABinOrSavFile(), IsACommand(), IsAFile(), IsAGraphFile(), IsAGraphFilegraph(), IsAGraphFilegraphb(), IsAScicosFile(), IsAScicosFileCOS(), IsAScicosFileCOSF(), IsASpecialKey(), IsCreatedIC(), IsDownAxes(), IsEmptyClipboard(), IsEntityPickerMenu(), isFittingInCell(), isGedOpenedOn(), Ishidden(), IsInsideRectangle(), isListCurrentElementEmptyMatrix(), IsLoadedFFTW(), IsRegistered(), isStringParamEqual(), IsTheGoodShell(), IsToThePrompt(), ItemInRectangle(), JVM_Create_SciGUIConsole_Object(), KillBackwardWord(), KillCurrentSelection(), KillForwardWord(), KillToEndOfLine(), KillToEndOfParagraph(), LanguageIsOK(), LaunchFilebyExtension(), Layout(), List_free_item_with_check(), Load(), Load_primitives_from_file(), LoadArrayCPUFromFile(), LoadFFTWLibrary(), loadGraphicModule(), LoadHashTableLocalization(), LoadHashTablesLocalization(), loadlanguagepref_linux(), LoadNewFont(), LocalInsertNewLine(), LoopAndRefigureChildren(), LWZReadByte_(), main(), MakeSetValuesRequest(), MatDialogProc(), MatrixDialogWindow(), MChoicePage(), MDialogPage(), Merge3d(), move_shadow(), MoveBackwardChar(), MoveBeginningOfFile(), MoveEndOfFile(), MoveForwardChar(), needtochangelanguage(), NoRegistered(), Objfpoly(), Objplot3d(), Objpoly(), ON_ABOUT_WM_COMMAND(), ON_ABOUT_WM_INITDIALOG(), ON_EVENT_GRAPH_WM_LBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_LBUTTONDOWN(), ON_EVENT_GRAPH_WM_LBUTTONUP(), ON_EVENT_GRAPH_WM_MBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_MBUTTONDOWN(), ON_EVENT_GRAPH_WM_MBUTTONUP(), ON_EVENT_GRAPH_WM_RBUTTONDBLCLK(), ON_EVENT_GRAPH_WM_RBUTTONDOWN(), ON_EVENT_GRAPH_WM_RBUTTONUP(), ON_FILESASSOCIATIONBOX_WM_COMMAND(), ON_FILESASSOCIATIONBOX_WM_INITDIALOG(), ON_MESSAGEBOXNEWGRAPHICMODE_WM_COMMAND(), ON_MESSAGEBOXNEWGRAPHICMODE_WM_INITDIALOG(), ON_WND_CONSOLE_WM_CLOSE(), ON_WND_CONSOLE_WM_COMMAND(), ON_WND_CONSOLE_WM_COPYDATA(), ON_WND_CONSOLE_WM_CREATE(), ON_WND_CONSOLE_WM_DESTROY(), ON_WND_CONSOLE_WM_DROPFILES(), ON_WND_CONSOLE_WM_ENDSESSION(), ON_WND_CONSOLE_WM_ENTERSIZEMOVE(), ON_WND_CONSOLE_WM_EXITSIZEMOVE(), ON_WND_CONSOLE_WM_GETMINMAXINFO(), ON_WND_CONSOLE_WM_PAINT(), ON_WND_CONSOLE_WM_SETFOCUS(), ON_WND_CONSOLE_WM_SIZE(), ON_WND_CONSOLE_WM_SYSCOLORCHANGE(), ON_WND_CONSOLE_WM_SYSCOMMAND(), ON_WND_GRAPH_WM_CLOSE(), ON_WND_GRAPH_WM_COMMAND(), ON_WND_GRAPH_WM_CREATE(), ON_WND_GRAPH_WM_DESTROY(), ON_WND_GRAPH_WM_DROPFILES(), ON_WND_GRAPH_WM_HSCROLL(), ON_WND_GRAPH_WM_PAINT(), ON_WND_GRAPH_WM_SIZE(), ON_WND_GRAPH_WM_VSCROLL(), ON_WND_PARENTGRAPH_WM_CLOSE(), ON_WND_PARENTGRAPH_WM_COMMAND(), ON_WND_PARENTGRAPH_WM_CREATE(), ON_WND_PARENTGRAPH_WM_DESTROY(), ON_WND_PARENTGRAPH_WM_DROPFILES(), ON_WND_PARENTGRAPH_WM_GETMINMAXINFO(), ON_WND_PARENTGRAPH_WM_PAINT(), ON_WND_PARENTGRAPH_WM_SETFOCUS(), ON_WND_PARENTGRAPH_WM_SIZE(), ON_WND_PARENTGRAPH_WM_SYSCOMMAND(), ON_WND_TEXT_WM_CLOSE(), ON_WND_TEXT_WM_COMMAND(), ON_WND_TEXT_WM_CREATE(), ON_WND_TEXT_WM_DESTROY(), ON_WND_TEXT_WM_HSCROLL(), ON_WND_TEXT_WM_KEY(), ON_WND_TEXT_WM_LBUTTONDOWN(), ON_WND_TEXT_WM_MOUSEMOVE(), ON_WND_TEXT_WM_PAINT(), ON_WND_TEXT_WM_SETCURSOR(), ON_WND_TEXT_WM_SETFOCUS(), ON_WND_TEXT_WM_SIZE(), ON_WND_TEXT_WM_SYSCOLORCHANGE(), ON_WND_TEXT_WM_VSCROLL(), openGraphicSession(), OpenSaveSCIFile(), out_call(), PaintThumb(), PaneSetValues(), parse_args(), parse_page_string(), plot2dn(), plot3dn(), PopPaneStack(), PositionForXY(), PrintDlgProc(), PrintFile(), PrintString(), prtdlg(), PutString(), PutString_SciGUIConsole(), read_history(), ReadColorMap(), ReadImage(), ReadRegistryGraph(), ReadRegistryTxt(), Realize(), rebuild_strflag(), ReceiveFromAnotherScilab(), RefreshGraphToolBar(), RegisterParentWindowClass(), RegisterParentWindowGraphClass(), RegisterTextWindowClass(), RegisterToVendorShell(), RegisterWindowGraphClass(), reinitSubWin(), RemoveCharsFromEOL(), RemoveDir(), RemoveHastable_string(), Replace(), ReplacePrompt(), ReplaceText(), rescale(), Resize(), ResizeScreenBuffer(), ResizeVendorShell_Core(), ReturnValueSetenv(), rlgets(), rlgets_nw(), Save(), SaveCurrentLine(), savelanguagepref_linux(), SavePs(), scale_knob(), Scan(), Sci_Axis(), sci_drawnow(), sci_move(), sci_raise_window(), sci_UImenu(), sci_xarc(), sci_xarcs(), sci_xfarcs(), sci_xget(), sci_xpoly(), sci_xrect(), sci_xrects(), sci_xset(), sci_xstring(), sci_xstringb(), sci_xtitle(), sciAddThisToItsParent(), SciAxisNew(), SciChoiceI(), sciClip(), sciDelThisToItsParent(), SciDialogDlgProc(), SciDrawLines(), SciEnvForWindows(), sciGetLegendDefined(), sciGetVisibility(), sciInitGraphicContext(), sciInitGraphicMode(), sciInitIs3d(), sciInitScrollBar(), sciIsAreaZoom(), sciIsClicked(), sciIsMergeable(), ScilabGResize(), ScilabPaint(), SciMakeFont(), SciMessageDlgProc(), SciPalette(), SciShowAllUimenus(), sciStandrardBuildOperations(), SciViewportMove(), Search(), SelectAll(), SendCommandToAnotherScilab(), SendGraphMacro(), SendInputText(), SendMacro(), SendMacroEntityPicker(), SendScilabJobs(), Set(), set_auto_clear_property(), set_auto_dimensionning_property(), set_auto_position_property(), set_auto_resize_property(), set_auto_rotation_property(), set_auto_scale_property(), set_auto_ticks_property(), set_axes_reverse_property(), set_axes_visible_property(), set_box_property(), set_cube_scaling_property(), set_fill_mode_property(), set_handle_visible_property(), Set_HOME_PATH(), set_immediate_drawing_property(), set_interp_color_mode_property(), set_isoview_property(), set_line_mode_property(), set_mark_mode_property(), set_mark_style_property(), set_menu_enable_property(), Set_SCI_PATH(), Set_Shell(), Set_SOME_ENVIRONMENTS_VARIABLES_FOR_SCILAB(), set_sub_tics_property(), set_surface_mode_property(), Set_TCL_LIBRARY_PATH(), set_text_box_mode_property(), set_tight_limits_property(), Set_TK_LIBRARY_PATH(), set_view_property(), set_visible_property(), set_vt_visibility(), setenvc(), setenvtcl(), SetFromCToON(), SetFromJavaToON(), SetICFocus(), SetICValues(), SetICValuesShared(), SetIhmSystemDefaultTextBackgroundColor(), SetIhmSystemDefaultTextColor(), SetIhmTextBackgroundColor(), SetIhmTextColor(), setlanguage(), setlanguagecode(), SetLastJob(), SetResourceByName(), Setscig_buzyState(), setSCIHOME(), setSubWinAngles(), SetTabs(), SetValues(), SetVarAString(), SetVariablesStructs(), SetVarMatrix(), SetVarScalar(), SetVarStrings(), setwindowdim(), SetWITH_GUI(), ShapeButton(), SharedICChangeFocusWindow(), ShowGraphToolBar(), ShowToolBar(), SortStrings(), SortVarsStructByStrings(), squash_spaces(), StartJVM_CONSOLE(), StartJVMs(), StartScilab(), strflag2axes_properties(), StripOutOldCRs(), TCL_ArrayDim(), Terminate_JVM_Thread_CONSOLE(), TerminateCorePart1(), TerminateCorePart2(), TerminateGraphics(), TerminateGUI(), TerminateJVM_CONSOLE(), TerminateJVMs(), TerminateLocalization(), TerminateScilab(), TerminateTclTk(), TestRegistryKey(), TextFocusIn(), TextGetCh(), TextMakeFont(), TextToCursor(), tic(), ToAlternate(), ToolBarWin32(), TrackDown(), TrackMouse(), TranslateExposeRegion(), TransposeCharacters(), TryNewLayout(), Unhighlight(), Unset(), UnsetICFocus(), UpdateAKey(), UpdateBIN(), UpdateCOS(), UpdateCOSF(), UpdateDEM(), UpdateGRAPH(), UpdateGRAPHB(), UpdateMark(), UpdateSAV(), UpdateSCE(), UpdateSCI(), UpdateSubwinScale(), UpdateText(), UpdateTextInLine(), UpdateTST(), updateXaxesTics(), updateYaxesTics(), VerifyModule(), VTInitialize(), VTRealize(), VTRun(), VTSetValues(), Windows_Main(), WindowsQueryRegistry(), WindowsQueryRegistryList(), WindowsQueryRegistryNumberOfElementsInList(), WinMain(), with_module(), write_history(), WriteIntoKeyBuffer(), WriteIntoScilab(), WriteToFile(), XawAsciiSave(), XawFormDoLayout(), XawTextEnableRedisplay(), XawTextInvalidate(), XawTextReplace(), XawTextSetInsertionPoint(), XawTextSetSource(), XawVendorShellClassPartInit(), XawVendorShellInitialize(), XDPi2R(), xgray(), xgray1(), XLogScale(), XPi2R(), Xputchar(), XScale(), xscimore(), xsetg(), YDPi2R(), YGradPosition(), YLogScale(), YPi2R(), Zoom3d_XPi2R(), Zoom3d_YPi2R(), zoom_box(), and zzledt().


Function Documentation

static void output_prim Argdcl ( (FILEP, struct Primblock *)   )  [static]

static void output_literal Argdcl ( (FILEP, long, Constp  )  [static]

static void output_unary Argdcl ( (FILEP, Exprp  )  [static]

static void output_list Argdcl ( (FILEP, struct Listblock *)   )  [static]

void compgoto_out ( FILE *  outfile,
expptr  index,
expptr  labels 
)

Definition at line 1677 of file output.c.

References Ansi, Chain::datap, ENULL, err, erri(), expr_out(), i, index, ISICON, Expression::listblock, Listblock::listp, next_tab, nice_printf(), OPWHATSIN, prev_tab, s1, s2, Expression::tag, TEXPR, TLIST, TNAME, and user_label().

Referenced by do_p1_comp_goto().

01679 {
01680     char *s1, *s2;
01681 
01682     if (index == ENULL)
01683         err ("compgoto_out:  null index for computed goto");
01684     else if (labels && labels -> tag != TLIST)
01685         erri ("compgoto_out:  expected label list, got tag '%d'",
01686                 labels -> tag);
01687     else {
01688         chainp elts;
01689         int i = 1;
01690 
01691         s2 = /*(*/ ") {\n"; /*}*/
01692         if (Ansi)
01693                 s1 = "switch ("; /*)*/
01694         else if (index->tag == TNAME || index->tag == TEXPR
01695                                 && index->exprblock.opcode == OPWHATSIN)
01696                 s1 = "switch ((int)"; /*)*/
01697         else {
01698                 s1 = "switch ((int)(";
01699                 s2 = ")) {\n"; /*}*/
01700                 }
01701         nice_printf(outfile, s1);
01702         expr_out (outfile, index);
01703         nice_printf (outfile, s2);
01704         next_tab (outfile);
01705 
01706         for (elts = labels -> listblock.listp; elts; elts = elts -> nextp, i++) {
01707             if (elts -> datap) {
01708                 if (ISICON(((expptr) (elts -> datap))))
01709                     nice_printf (outfile, "case %d:  goto %s;\n", i,
01710                         user_label(((expptr)(elts->datap))->constblock.Const.ci));
01711                 else
01712                     err ("compgoto_out:  bad label in label list");
01713             } /* if (elts -> datap) */
01714         } /* for elts */
01715         prev_tab (outfile);
01716         nice_printf (outfile, /*{*/ "}\n");
01717     } /* else */
01718 } /* compgoto_out */

Here is the call graph for this function:

Here is the caller graph for this function:

char* dtos ( double  x  ) 

Definition at line 1412 of file output.c.

References db_fmt_string, and mem().

Referenced by imagpart(), mkcxcon(), p1_const(), prconr(), putconst(), realpart(), and samefpconst().

01414 {
01415         static char buf[64];
01416 #ifdef USE_DTOA
01417         g_fmt(buf, x);
01418 #else
01419         sprintf(buf, db_fmt_string, x);
01420 #endif
01421         return strcpy(mem(strlen(buf)+1,0), buf);
01422         }

Here is the call graph for this function:

Here is the caller graph for this function:

void elif_out ( FILE *  outfile,
expptr  expr 
)

Definition at line 1636 of file output.c.

References expr(), out_if(), output_rbrace(), and prev_tab.

Referenced by do_p1_elif().

01638 {
01639     prev_tab (outfile);
01640     output_rbrace(outfile, "} else ");
01641     out_if (outfile, expr);
01642 } /* elif_out */

Here is the call graph for this function:

Here is the caller graph for this function:

void end_else_out ( FILE *  outfile  ) 

Definition at line 1661 of file output.c.

References output_rbrace(), and prev_tab.

Referenced by do_p1_endelse().

01663 {
01664     prev_tab (outfile);
01665     output_rbrace(outfile, "}\n");
01666 } /* end_else_out */

Here is the call graph for this function:

Here is the caller graph for this function:

void endif_out ( FILE *  outfile  ) 

Definition at line 1649 of file output.c.

References output_rbrace(), and prev_tab.

Referenced by do_p1_endif().

01651 {
01652     prev_tab (outfile);
01653     output_rbrace(outfile, "}\n");
01654 } /* endif_out */

Here is the call graph for this function:

Here is the caller graph for this function:

void expr_out ( FILE *  fp,
expptr  e 
)

Definition at line 147 of file output.c.

References CLVAR, done, err, erri(), Expression::exprblock, free(), frexpr(), is_binary_op, is_unary_op, ISICON, ISINT, ISONE, ISREAL, M, Expression::nameblock, nerr, nice_printf(), NULL, ONEOF, op_assign(), OPASSIGN, opeqable, OPMINUSEQ, OPPLUSEQ, OPPREDEC, OPPREINC, out_addr(), out_const(), out_name(), output_binary(), output_list(), output_prim(), output_unary(), Exprblock::rightp, same_ident(), STGARG, STGAUTO, STGBSS, TADDR, Expression::tag, TCONST, TERROR, TEXPR, TIMPLDO, TLIST, TNAME, TPRIM, trapuv, var, and warn().

Referenced by compgoto_out(), do_p1_2while(), do_p1_subr_ret(), opconv_fudge(), out_addr(), out_and_free_statement(), out_args(), out_asgoto(), out_call(), out_for(), out_if(), output_arg_list(), output_binary(), output_list(), and ref_defs().

00149 {
00150         Namep var;
00151         expptr leftp, rightp;
00152         int opcode;
00153 
00154     if (e == (expptr) NULL)
00155         return;
00156 
00157     switch (e -> tag) {
00158         case TNAME:     out_name (fp, (struct Nameblock *) e);
00159                         return;
00160 
00161         case TCONST:    out_const(fp, &e->constblock);
00162                         goto end_out;
00163         case TEXPR:
00164                         break;
00165 
00166         case TADDR:     out_addr (fp, &(e -> addrblock));
00167                         goto end_out;
00168 
00169         case TPRIM:     if (!nerr)
00170                                 warn ("expr_out: got TPRIM");
00171                         output_prim (fp, &(e -> primblock));
00172                         return;
00173 
00174         case TLIST:     output_list (fp, &(e -> listblock));
00175  end_out:               frexpr(e);
00176                         return;
00177 
00178         case TIMPLDO:   err ("expr_out: got TIMPLDO");
00179                         return;
00180 
00181         case TERROR:
00182         default:
00183                         erri ("expr_out: bad tag '%d'", e -> tag);
00184     } /* switch */
00185 
00186 /* Now we know that the tag is TEXPR */
00187 
00188 /* Optimize on simple expressions, such as "a = a + b" ==> "a += b" */
00189 
00190     if (e -> exprblock.opcode == OPASSIGN && e -> exprblock.rightp)
00191       switch(e->exprblock.rightp->tag) {
00192         case TEXPR:
00193         opcode = e -> exprblock.rightp -> exprblock.opcode;
00194 
00195         if (opeqable[opcode]) {
00196             if ((leftp = e -> exprblock.leftp) &&
00197                 (rightp = e -> exprblock.rightp -> exprblock.leftp)) {
00198 
00199                 if (same_ident (leftp, rightp)) {
00200                     expptr temp = e -> exprblock.rightp;
00201 
00202                     e -> exprblock.opcode = op_assign(opcode);
00203 
00204                     e -> exprblock.rightp = temp -> exprblock.rightp;
00205                     temp->exprblock.rightp = 0;
00206                     frexpr(temp);
00207                 } /* if same_ident (leftp, rightp) */
00208             } /* if leftp && rightp */
00209         } /* if opcode == OPPLUS || */
00210         break;
00211 
00212         case TNAME:
00213           if (trapuv) {
00214                 var = &e->exprblock.rightp->nameblock;
00215                 if (ISREAL(var->vtype)
00216                  && var->vclass == CLVAR
00217                  && ONEOF(var->vstg, M(STGAUTO)|M(STGBSS))
00218                  && !var->vsave) {
00219                         expr_out(fp, e -> exprblock.leftp);
00220                         nice_printf(fp, " = _0 + ");
00221                         expr_out(fp, e->exprblock.rightp);
00222                         goto done;
00223                         }
00224                 }
00225       } /* if e -> exprblock.opcode == OPASSIGN */
00226 
00227 
00228 /* Optimize on increment or decrement by 1 */
00229 
00230     {
00231         opcode = e -> exprblock.opcode;
00232         leftp = e -> exprblock.leftp;
00233         rightp = e -> exprblock.rightp;
00234 
00235         if (leftp && rightp && (leftp -> headblock.vstg == STGARG ||
00236                 ISINT (leftp -> headblock.vtype)) &&
00237                 (opcode == OPPLUSEQ || opcode == OPMINUSEQ) &&
00238                 ISINT (rightp -> headblock.vtype) &&
00239                 ISICON (e -> exprblock.rightp) &&
00240                 (ISONE (e -> exprblock.rightp) ||
00241                 e -> exprblock.rightp -> constblock.Const.ci == -1)) {
00242 
00243 /* Allow for the '-1' constant value */
00244 
00245             if (!ISONE (e -> exprblock.rightp))
00246                 opcode = (opcode == OPPLUSEQ) ? OPMINUSEQ : OPPLUSEQ;
00247 
00248 /* replace the existing opcode */
00249 
00250             if (opcode == OPPLUSEQ)
00251                 e -> exprblock.opcode = OPPREINC;
00252             else
00253                 e -> exprblock.opcode = OPPREDEC;
00254 
00255 /* Free up storage used by the right hand side */
00256 
00257             frexpr (e -> exprblock.rightp);
00258             e->exprblock.rightp = 0;
00259         } /* if opcode == OPPLUS */
00260     } /* block */
00261 
00262 
00263     if (is_unary_op (e -> exprblock.opcode))
00264         output_unary (fp, &(e -> exprblock));
00265     else if (is_binary_op (e -> exprblock.opcode))
00266         output_binary (fp, &(e -> exprblock));
00267     else
00268         erri ("expr_out: bad opcode '%d'", (int) e -> exprblock.opcode);
00269 
00270  done:
00271     free((char *)e);
00272 
00273 } /* expr_out */

Here is the call graph for this function:

Here is the caller graph for this function:

void extern_out ( FILE *  fp,
Extsym extsym 
)

Definition at line 1483 of file output.c.

References Extsym::cextname, nice_printf(), and NULL.

Referenced by out_addr(), out_call(), out_name(), wr_abbrevs(), and wr_common_decls().

01485 {
01486     if (extsym == (Extsym *) NULL)
01487         return;
01488 
01489     nice_printf (fp, "%s", extsym->cextname);
01490 
01491 } /* extern_out */

Here is the call graph for this function:

Here is the caller graph for this function:

static char* findconst ( register long  m  )  [static]

Definition at line 853 of file output.c.

References Literal::cds, Fatal(), Literal::litnum, litpool, and nliterals.

Referenced by opconv_fudge().

00855 {
00856         register struct Literal *litp, *litpe;
00857 
00858         litp = litpool;
00859         for(litpe = litp + nliterals; litp < litpe; litp++)
00860                 if (litp->litnum ==  m)
00861                         return litp->cds[0];
00862         Fatal("findconst failure!");
00863         return 0;
00864         }

Here is the call graph for this function:

Here is the caller graph for this function:

char* flconst ( char *  buf,
char *  x 
)

Definition at line 1400 of file output.c.

References fl_fmt_string.

Referenced by out_const().

01402 {
01403         sprintf(buf, fl_fmt_string, x);
01404         return buf;
01405         }

Here is the caller graph for this function:

static int opconv_fudge ( FILE *  fp,
struct Exprblock e 
) [static]

Definition at line 872 of file output.c.

References badtag(), buf, c_type_decl(), chr_fmt, Addrblock::cmplx_sub, Nameblock::cvarname, expr_out(), fatali(), findconst(), halign, ICON, Addrblock::ident, ISCOMPLEX, Exprblock::leftp, lp, M, Addrblock::memoffset, mkexpr(), Addrblock::name, nice_printf(), Offset, ONEOF, Exprblock::opcode, OPMINUS, OPSTAR, OPWHATSIN, out_addr(), out_args(), out_name(), s, STGARG, STGCOMMON, STGCONST, STGEQUIV, STGMEMNO, STGUNKNOWN, TADDR, Nameblock::tag, TCONST, TEXPR, TNAME, TYCHAR, tyint, typesize, UNAM_IDENT, UNAM_NAME, UNAM_REF, Addrblock::uname_tag, Addrblock::user, Nameblock::voffset, Nameblock::vstg, and Exprblock::vtype.

Referenced by output_binary().

00874 {
00875         /* special handling for conversions, ichar and character*1 */
00876         register expptr lp;
00877         register union Expression *Offset;
00878         register char *cp;
00879         int lt;
00880         char buf[8], *s;
00881         unsigned int k;
00882         Namep np;
00883         Addrp ap;
00884 
00885         if (!(lp = e->leftp))   /* possible with erroneous Fortran */
00886                 return 1;
00887         lt = lp->headblock.vtype;
00888         if (lt == TYCHAR) {
00889                 switch(lp->tag) {
00890                         case TNAME:
00891                                 nice_printf(fp, "*(unsigned char *)");
00892                                 out_name(fp, (Namep)lp);
00893                                 return 1;
00894                         case TCONST:
00895  tconst:
00896                                 cp = lp->constblock.Const.ccp;
00897  tconst1:
00898                                 k = *(unsigned char *)cp;
00899                                 if (k < 128) { /* ASCII character */
00900                                         sprintf(buf, chr_fmt[k], k);
00901                                         nice_printf(fp, "'%s'", buf);
00902                                         }
00903                                 else
00904                                         nice_printf(fp, "%d", k);
00905                                 return 1;
00906                         case TADDR:
00907                                 switch(lp->addrblock.vstg) {
00908                                     case STGMEMNO:
00909                                         if (halign && e->vtype != TYCHAR) {
00910                                                 nice_printf(fp, "*(%s *)",
00911                                                     c_type_decl(e->vtype,0));
00912                                                 expr_out(fp, lp);
00913                                                 return 1;
00914                                                 }
00915                                         cp = findconst(lp->addrblock.memno);
00916                                         goto tconst1;
00917                                     case STGCONST:
00918                                         goto tconst;
00919                                     }
00920                                 lp->addrblock.vtype = tyint;
00921                                 Offset = lp->addrblock.memoffset;
00922                                 switch(lp->addrblock.uname_tag) {
00923                                   case UNAM_REF:
00924                                         nice_printf(fp, "*(unsigned char *)");
00925                                         return 0;
00926                                   case UNAM_NAME:
00927                                         np = lp->addrblock.user.name;
00928                                         if (ONEOF(np->vstg,
00929                                             M(STGCOMMON)|M(STGEQUIV)))
00930                                                 Offset = mkexpr(OPMINUS, Offset,
00931                                                         ICON(np->voffset));
00932                                         }
00933                                 lp->addrblock.memoffset = Offset ?
00934                                         mkexpr(OPSTAR, Offset,
00935                                                 ICON(typesize[tyint]))
00936                                         : ICON(0);
00937                                 lp->addrblock.isarray = 1;
00938                                 /* STGCOMMON or STGEQUIV would cause */
00939                                 /* voffset to be added in a second time */
00940                                 lp->addrblock.vstg = STGUNKNOWN;
00941                                 nice_printf(fp, "*(unsigned char *)&");
00942                                 return 0;
00943                         default:
00944                                 badtag("opconv_fudge", lp->tag);
00945                         }
00946                 }
00947         if (lt != e->vtype) {
00948                 s = c_type_decl(e->vtype, 0);
00949                 if (ISCOMPLEX(lt)) {
00950  tryagain:
00951                         np = (Namep)e->leftp;
00952                         switch(np->tag) {
00953                           case TNAME:
00954                                 nice_printf(fp, "(%s) %s%sr", s,
00955                                         np->cvarname,
00956                                         np->vstg == STGARG ? "->" : ".");
00957                                 return 1;
00958                           case TADDR:
00959                                 ap = (Addrp)np;
00960                                 switch(ap->uname_tag) {
00961                                   case UNAM_IDENT:
00962                                         nice_printf(fp, "(%s) %s.r", s,
00963                                                 ap->user.ident);
00964                                         return 1;
00965                                   case UNAM_NAME:
00966                                         nice_printf(fp, "(%s) ", s);
00967                                         out_addr(fp, ap);
00968                                         nice_printf(fp, ".r");
00969                                         return 1;
00970                                   case UNAM_REF:
00971                                         nice_printf(fp, "(%s) %s_%s(",
00972                                          s, ap->user.name->cvarname,
00973                                          ap->cmplx_sub ? "subscr" : "ref");
00974                                         out_args(fp, ap->memoffset);
00975                                         nice_printf(fp, ").r");
00976                                         return 1;
00977                                   default:
00978                                         fatali(
00979                                          "Bad uname_tag %d in opconv_fudge",
00980                                                 ap->uname_tag);
00981                                   }
00982                           case TEXPR:
00983                                 e = (Exprp)np;
00984                                 if (e->opcode == OPWHATSIN)
00985                                         goto tryagain;
00986                           default:
00987                                 fatali("Unexpected tag %d in opconv_fudge",
00988                                         np->tag);
00989                           }
00990                         }
00991                 nice_printf(fp, "(%s) ", s);
00992                 }
00993         return 0;
00994         }

Here is the call graph for this function:

Here is the caller graph for this function:

void out_addr ( FILE *  fp,
struct Addrblock addrp 
)

Definition at line 575 of file output.c.

References Addrblock::Charp, Constant::ci, CLPROC, Addrblock::cmplx_sub, Addrblock::Const, Constblock::Const, Expression::constblock, Nameblock::cvarname, doin_setbound, expr_out(), extern_out(), extsymtab, Fatal(), ICON, Addrblock::ident, is_left_assoc, Addrblock::isarray, ISICON, M, Addrblock::memoffset, mkexpr(), mkintcon(), multitype, Addrblock::name, nice_printf(), Addrblock::ntempelt, NULL, offset, ONEOF, oneof_stg(), op_precedence, OPMINUS, OPPLUS, OPSLASH, out_args(), out_const(), out_name(), output_literal(), PTHISPROC, s, Addrblock::skip_offset, STGARG, STGCOMMON, STGCONST, STGEQUIV, STGMEMNO, Expression::tag, TCONST, TEXPR, TYCHAR, typesize, UNAM_CHARP, UNAM_CONST, UNAM_EXTERN, UNAM_IDENT, UNAM_NAME, UNAM_REF, UNAM_UNKNOWN, Addrblock::uname_tag, Addrblock::user, Addrblock::vclass, Nameblock::vdim, Nameblock::vprocclass, Addrblock::vstg, Addrblock::vtype, and xretslot.

Referenced by expr_out(), opconv_fudge(), and wr_nv_ident_help().

00577 {
00578         extern Extsym *extsymtab;
00579         int was_array = 0;
00580         char *s;
00581 
00582 
00583         if (addrp == NULL)
00584                 return;
00585         if (doin_setbound
00586                         && addrp->vstg == STGARG
00587                         && addrp->vtype != TYCHAR
00588                         && ISICON(addrp->memoffset)
00589                         && !addrp->memoffset->constblock.Const.ci)
00590                 nice_printf(fp, "*");
00591 
00592         switch (addrp -> uname_tag) {
00593             case UNAM_REF:
00594                 nice_printf(fp, "%s_%s(", addrp->user.name->cvarname,
00595                         addrp->cmplx_sub ? "subscr" : "ref");
00596                 out_args(fp, addrp->memoffset);
00597                 nice_printf(fp, ")");
00598                 return;
00599             case UNAM_NAME:
00600                 out_name (fp, addrp -> user.name);
00601                 break;
00602             case UNAM_IDENT:
00603                 if (*(s = addrp->user.ident) == ' ') {
00604                         if (multitype)
00605                                 nice_printf(fp, "%s",
00606                                         xretslot[addrp->vtype]->user.ident);
00607                         else
00608                                 nice_printf(fp, "%s", s+1);
00609                         }
00610                 else {
00611                         nice_printf(fp, "%s", s);
00612                         }
00613                 break;
00614             case UNAM_CHARP:
00615                 nice_printf(fp, "%s", addrp->user.Charp);
00616                 break;
00617             case UNAM_EXTERN:
00618                 extern_out (fp, &extsymtab[addrp -> memno]);
00619                 break;
00620             case UNAM_CONST:
00621                 switch(addrp->vstg) {
00622                         case STGCONST:
00623                                 out_const(fp, (Constp)addrp);
00624                                 break;
00625                         case STGMEMNO:
00626                                 output_literal (fp, addrp->memno,
00627                                         (Constp)addrp);
00628                                 break;
00629                         default:
00630                         Fatal("unexpected vstg in out_addr");
00631                         }
00632                 break;
00633             case UNAM_UNKNOWN:
00634             default:
00635                 nice_printf (fp, "Unknown Addrp");
00636                 break;
00637         } /* switch */
00638 
00639 /* It's okay to just throw in the brackets here because they have a
00640    precedence level of 15, the highest value.  */
00641 
00642     if ((addrp->uname_tag == UNAM_NAME && addrp->user.name->vdim
00643                         || addrp->ntempelt > 1 || addrp->isarray)
00644         && addrp->vtype != TYCHAR) {
00645         expptr offset;
00646 
00647         was_array = 1;
00648 
00649         offset = addrp -> memoffset;
00650         addrp->memoffset = 0;
00651         if (ONEOF(addrp->vstg, M(STGCOMMON)|M(STGEQUIV))
00652                 && addrp -> uname_tag == UNAM_NAME
00653                 && !addrp->skip_offset)
00654             offset = mkexpr (OPMINUS, offset, mkintcon (
00655                     addrp -> user.name -> voffset));
00656 
00657         nice_printf (fp, "[");
00658 
00659         offset = mkexpr (OPSLASH, offset,
00660                 ICON (typesize[addrp -> vtype] * (addrp -> Field ? 2 : 1)));
00661         expr_out (fp, offset);
00662         nice_printf (fp, "]");
00663         }
00664 
00665 /* Check for structure field reference */
00666 
00667     if (addrp -> Field && addrp -> uname_tag != UNAM_CONST &&
00668             addrp -> uname_tag != UNAM_UNKNOWN) {
00669         if (oneof_stg((addrp -> uname_tag == UNAM_NAME ? addrp -> user.name :
00670                 (Namep) NULL), addrp -> vstg, M(STGARG)|M(STGEQUIV))
00671                 && !was_array && (addrp->vclass != CLPROC || !multitype))
00672             nice_printf (fp, "->%s", addrp -> Field);
00673         else
00674             nice_printf (fp, ".%s", addrp -> Field);
00675     } /* if */
00676 
00677 /* Check for character subscripting */
00678 
00679     if (addrp->vtype == TYCHAR &&
00680             (addrp->vclass != CLPROC || addrp->uname_tag == UNAM_NAME
00681                         && addrp->user.name->vprocclass == PTHISPROC) &&
00682             addrp -> memoffset &&
00683             (addrp -> uname_tag != UNAM_NAME ||
00684              addrp -> user.name -> vtype == TYCHAR) &&
00685             (!ISICON (addrp -> memoffset) ||
00686              (addrp -> memoffset -> constblock.Const.ci))) {
00687 
00688         int use_paren = 0;
00689         expptr e = addrp -> memoffset;
00690 
00691         if (!e)
00692                 return;
00693         addrp->memoffset = 0;
00694 
00695         if (ONEOF(addrp->vstg, M(STGCOMMON)|M(STGEQUIV))
00696          && addrp -> uname_tag == UNAM_NAME) {
00697             e = mkexpr (OPMINUS, e, mkintcon (addrp -> user.name -> voffset));
00698 
00699 /* mkexpr will simplify it to zero if possible */
00700             if (e->tag == TCONST && e->constblock.Const.ci == 0)
00701                 return;
00702         } /* if addrp -> vstg == STGCOMMON */
00703 
00704 /* In the worst case, parentheses might be needed OUTSIDE the expression,
00705    too.  But since I think this subscripting can only appear as a
00706    parameter in a procedure call, I don't think outside parens will ever
00707    be needed.  INSIDE parens are handled below */
00708 
00709         nice_printf (fp, " + ");
00710         if (e -> tag == TEXPR) {
00711             int arg_prec = op_precedence (e -> exprblock.opcode);
00712             int prec = op_precedence (OPPLUS);
00713             use_paren = arg_prec && (arg_prec < prec || (arg_prec == prec &&
00714                     is_left_assoc (OPPLUS)));
00715         } /* if e -> tag == TEXPR */
00716         if (use_paren) nice_printf (fp, "(");
00717         expr_out (fp, e);
00718         if (use_paren) nice_printf (fp, ")");
00719     } /* if */
00720 } /* out_addr */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_and_free_statement ( FILE *  outfile,
expptr  expr 
)

Definition at line 282 of file output.c.

References expr(), expr_out(), and nice_printf().

Referenced by prolog(), and start_formatting().

00284 {
00285     if (expr)
00286         expr_out (outfile, expr);
00287 
00288     nice_printf (outfile, ";\n");
00289 } /* out_and_free_statement */

Here is the call graph for this function:

Here is the caller graph for this function:

static void out_args ( FILE *  fp,
expptr  ep 
) [static]

Definition at line 549 of file output.c.

References badtag(), Chain::datap, expr_out(), Expression::listblock, Listblock::listp, Chain::nextp, nice_printf(), Expression::tag, and TLIST.

Referenced by opconv_fudge(), and out_addr().

00551 {
00552         chainp arglist;
00553 
00554         if(ep->tag != TLIST)
00555                 badtag("out_args", ep->tag);
00556         for(arglist = ep->listblock.listp;;) {
00557                 expr_out(fp, (expptr)arglist->datap);
00558                 arglist->datap = 0;
00559                 if (!(arglist = arglist->nextp))
00560                         break;
00561                 nice_printf(fp, ", ");
00562                 }
00563         }

Here is the call graph for this function:

Here is the caller graph for this function:

void out_asgoto ( FILE *  outfile,
expptr  expr 
)

Definition at line 1527 of file output.c.

References Ansi, Nameblock::assigned_values, err, expr(), expr_out(), next_tab, nice_printf(), NULL, OPWHATSIN, prev_tab, TADDR, TEXPR, TNAME, UNAM_NAME, user_label(), and value.

Referenced by do_p1_asgoto().

01529 {
01530     chainp value;
01531     Namep namep;
01532     int k;
01533 
01534     if (expr == (expptr) NULL) {
01535         err ("out_asgoto:  NULL variable expr");
01536         return;
01537     } /* if expr */
01538 
01539     nice_printf (outfile, Ansi ? "switch (" : "switch ((int)"); /*)*/
01540     expr_out (outfile, expr);
01541     nice_printf (outfile, ") {\n");
01542     next_tab (outfile);
01543 
01544 /* The initial addrp value will be stored as a namep pointer */
01545 
01546     switch(expr->tag) {
01547         case TNAME:
01548                 /* local variable */
01549                 namep = &expr->nameblock;
01550                 break;
01551         case TEXPR:
01552                 if (expr->exprblock.opcode == OPWHATSIN
01553                  && expr->exprblock.leftp->tag == TNAME)
01554                         /* argument */
01555                         namep = &expr->exprblock.leftp->nameblock;
01556                 else
01557                         goto bad;
01558                 break;
01559         case TADDR:
01560                 if (expr->addrblock.uname_tag == UNAM_NAME) {
01561                         /* initialized local variable */
01562                         namep = expr->addrblock.user.name;
01563                         break;
01564                         }
01565         default:
01566  bad:
01567                 err("out_asgoto:  bad expr");
01568                 return;
01569         }
01570 
01571     for(k = 0, value = namep -> varxptr.assigned_values; value;
01572             value = value->nextp, k++) {
01573         nice_printf (outfile, "case %d: goto %s;\n", k,
01574                 user_label((long)value->datap));
01575     } /* for value */
01576     prev_tab (outfile);
01577 
01578     nice_printf (outfile, "}\n");
01579 } /* out_asgoto */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_call ( FILE *  outfile,
int  op,
int  ftype,
expptr  len,
expptr  name,
expptr  args 
)

Definition at line 1135 of file output.c.

References A, Expression::addrblock, Ansi, Nameblock::arginfo, args, Argtypes::atypes, Addrblock::Charp, CHNULL, Constant::ci, Constblock::Const, Expression::constblock, Chain::datap, Argtypes::defined, err, expr_out(), Expression::exprblock, extern_out(), extsymtab, FALSE, forcereal, Expression::headblock, Addrblock::ident, Addrblock::isarray, ISCOMPLEX, ISICON, L, len, Expression::listblock, Listblock::listp, M, Addrblock::memno, Addrblock::memoffset, Addrblock::name, name, Argtypes::nargs, nice_printf(), NULL, ONEOF, OPCCALL, Exprblock::opcode, OPWHATSIN, out_name(), STGCOMMON, STGEQUIV, t, TADDR, Expression::tag, Nameblock::tag, TCONST, TEXPR, TNAME, TRUE, TYADDR, TYCHAR, TYERROR, Atype::type, Typename, TYREAL, TYSUBR, UNAM_CHARP, UNAM_EXTERN, UNAM_IDENT, UNAM_NAME, Addrblock::uname_tag, Addrblock::user, Nameblock::voffset, Addrblock::vstg, Headblock::vtype, and Addrblock::vtype.

Referenced by output_binary().

01137 {
01138     chainp arglist;             /* Pointer to any actual arguments */
01139     chainp cp;                  /* Iterator over argument lists */
01140     Addrp ret_val = (Addrp) NULL;
01141                                 /* Function return value buffer, if any is
01142                                    required */
01143     int byvalue;                /* True iff we're calling a C library
01144                                    routine */
01145     int done_once;              /* Used for writing commas to   outfile   */
01146     int narg, t;
01147     register expptr q;
01148     long L;
01149     Argtypes *at;
01150     Atype *A, *Ac;
01151     Namep np;
01152     extern int forcereal;
01153 
01154 /* Don't use addresses if we're calling a C function */
01155 
01156     byvalue = op == OPCCALL;
01157 
01158     if (args)
01159         arglist = args -> listblock.listp;
01160     else
01161         arglist = CHNULL;
01162 
01163 /* If this is a CHARACTER function, the first argument is the result */
01164 
01165     if (ftype == TYCHAR)
01166         if (ISICON (len)) {
01167             ret_val = (Addrp) (arglist -> datap);
01168             arglist = arglist -> nextp;
01169         } else {
01170             err ("adjustable character function");
01171             return;
01172         } /* else */
01173 
01174 /* If this is a COMPLEX function, the first argument is the result */
01175 
01176     else if (ISCOMPLEX (ftype)) {
01177         ret_val = (Addrp) (arglist -> datap);
01178         arglist = arglist -> nextp;
01179     } /* if ISCOMPLEX */
01180 
01181     /* prepare to cast procedure parameters -- set A if we know how */
01182     np = name->tag == TEXPR && name->exprblock.opcode == OPWHATSIN
01183         ? (Namep)name->exprblock.leftp : (Namep)name;
01184 
01185     A = Ac = 0;
01186     if (np->tag == TNAME && (at = np->arginfo)) {
01187         if (at->nargs > 0)
01188                 A = at->atypes;
01189         if (Ansi && (at->defined || at->nargs > 0))
01190                 Ac = at->atypes;
01191         }
01192 
01193 /* Now we can actually start to write out the function invocation */
01194 
01195     if (ftype == TYREAL && forcereal)
01196         nice_printf(outfile, "(real)");
01197     if (name -> tag == TEXPR && name -> exprblock.opcode == OPWHATSIN) {
01198         nice_printf (outfile, "(");
01199         expr_out (outfile, name);
01200         nice_printf (outfile, ")");
01201         }
01202     else
01203         expr_out(outfile, name);
01204 
01205     nice_printf(outfile, "(");
01206 
01207     if (ret_val) {
01208         if (ISCOMPLEX (ftype))
01209             nice_printf (outfile, "&");
01210         expr_out (outfile, (expptr) ret_val);
01211         if (Ac)
01212                 Ac++;
01213 
01214 /* The length of the result of a character function is the second argument */
01215 /* It should be in place from putcall(), so we won't touch it explicitly */
01216 
01217     } /* if ret_val */
01218     done_once = ret_val ? TRUE : FALSE;
01219 
01220 /* Now run through the named arguments */
01221 
01222     narg = -1;
01223     for (cp = arglist; cp; cp = cp -> nextp, done_once = TRUE) {
01224 
01225         if (done_once)
01226             nice_printf (outfile, ", ");
01227         narg++;
01228 
01229         if (!( q = (expptr)cp->datap) )
01230                 continue;
01231 
01232         if (q->tag == TADDR) {
01233                 if (q->addrblock.vtype > TYERROR) {
01234                         /* I/O block */
01235                         nice_printf(outfile, "&%s", q->addrblock.user.ident);
01236                         continue;
01237                         }
01238                 if (!byvalue && q->addrblock.isarray
01239                 && q->addrblock.vtype != TYCHAR
01240                 && q->addrblock.memoffset->tag == TCONST) {
01241 
01242                         /* check for 0 offset -- after */
01243                         /* correcting for equivalence. */
01244                         L = q->addrblock.memoffset->constblock.Const.ci;
01245                         if (ONEOF(q->addrblock.vstg, M(STGCOMMON)|M(STGEQUIV))
01246                                         && q->addrblock.uname_tag == UNAM_NAME)
01247                                 L -= q->addrblock.user.name->voffset;
01248                         if (L)
01249                                 goto skip_deref;
01250 
01251                         if (Ac && narg < at->dnargs
01252                          && q->headblock.vtype != (t = Ac[narg].type)
01253                          && t > TYADDR && t < TYSUBR)
01254                                 nice_printf(outfile, "(%s*)", Typename[t]);
01255 
01256                         /* &x[0] == x */
01257                         /* This also prevents &sizeof(doublereal)[0] */
01258 
01259                         switch(q->addrblock.uname_tag) {
01260                             case UNAM_NAME:
01261                                 out_name(outfile, q->addrblock.user.name);
01262                                 continue;
01263                             case UNAM_IDENT:
01264                                 nice_printf(outfile, "%s",
01265                                         q->addrblock.user.ident);
01266                                 continue;
01267                             case UNAM_CHARP:
01268                                 nice_printf(outfile, "%s",
01269                                         q->addrblock.user.Charp);
01270                                 continue;
01271                             case UNAM_EXTERN:
01272                                 extern_out(outfile,
01273                                         &extsymtab[q->addrblock.memno]);
01274                                 continue;
01275                             }
01276                         }
01277                 }
01278 
01279 /* Skip over the dereferencing operator generated only for the
01280    intermediate file */
01281  skip_deref:
01282         if (q -> tag == TEXPR && q -> exprblock.opcode == OPWHATSIN)
01283             q = q -> exprblock.leftp;
01284 
01285         if (q->headblock.vclass == CLPROC) {
01286             if (Castargs && (q->tag != TNAME
01287                                 || q->nameblock.vprocclass != PTHISPROC)
01288                          && (q->tag != TADDR
01289                                 || q->addrblock.uname_tag != UNAM_NAME
01290                                 || q->addrblock.user.name->vprocclass
01291                                                                 != PTHISPROC))
01292                 {
01293                 if (A && (t = A[narg].type) >= 200)
01294                         t %= 100;
01295                 else {
01296                         t = q->headblock.vtype;
01297                         if (q->tag == TNAME && q->nameblock.vimpltype)
01298                                 t = TYUNKNOWN;
01299                         }
01300                 nice_printf(outfile, "(%s)", usedcasts[t] = casttypes[t]);
01301                 }
01302             }
01303         else if (Ac && narg < at->dnargs
01304                 && q->headblock.vtype != (t = Ac[narg].type)
01305                 && t > TYADDR && t < TYSUBR)
01306                 nice_printf(outfile, "(%s*)", Typename[t]);
01307 
01308         if ((q -> tag == TADDR || q-> tag == TNAME) &&
01309                 (byvalue || q -> headblock.vstg != STGREG)) {
01310             if (q -> headblock.vtype != TYCHAR)
01311               if (byvalue) {
01312 
01313                 if (q -> tag == TADDR &&
01314                         q -> addrblock.uname_tag == UNAM_NAME &&
01315                         ! q -> addrblock.user.name -> vdim &&
01316                         oneof_stg(q -> addrblock.user.name, q -> addrblock.vstg,
01317                                         M(STGARG)|M(STGEQUIV)) &&
01318                         ! ISCOMPLEX(q->addrblock.user.name->vtype))
01319                     nice_printf (outfile, "*");
01320                 else if (q -> tag == TNAME
01321                         && oneof_stg(&q->nameblock, q -> nameblock.vstg,
01322                                 M(STGARG)|M(STGEQUIV))
01323                         && !(q -> nameblock.vdim))
01324                     nice_printf (outfile, "*");
01325 
01326               } else {
01327                 expptr memoffset;
01328 
01329                 if (q->tag == TADDR && (
01330                         !ONEOF (q -> addrblock.vstg, M(STGEXT)|M(STGLENG))
01331                         && (ONEOF(q->addrblock.vstg,
01332                                 M(STGCOMMON)|M(STGEQUIV)|M(STGMEMNO))
01333                             || ((memoffset = q->addrblock.memoffset)
01334                                 && (!ISICON(memoffset)
01335                                 || memoffset->constblock.Const.ci)))
01336                         || ONEOF(q->addrblock.vstg,
01337                                         M(STGINIT)|M(STGAUTO)|M(STGBSS))
01338                                 && !q->addrblock.isarray))
01339                     nice_printf (outfile, "&");
01340                 else if (q -> tag == TNAME
01341                         && !oneof_stg(&q->nameblock, q -> nameblock.vstg,
01342                                 M(STGARG)|M(STGEXT)|M(STGEQUIV)))
01343                     nice_printf (outfile, "&");
01344             } /* else */
01345 
01346             expr_out (outfile, q);
01347         } /* if q -> tag == TADDR || q -> tag == TNAME */
01348 
01349 /* Might be a Constant expression, e.g. string length, character constants */
01350 
01351         else if (q -> tag == TCONST) {
01352                 if (q->constblock.vtype == TYLONG)
01353                         nice_printf(outfile, "(ftnlen)%ld",
01354                                 q->constblock.Const.ci);
01355                 else
01356                         out_const(outfile, &q->constblock);
01357             }
01358 
01359 /* Must be some other kind of expression, or register var, or constant.
01360    In particular, this is likely to be a temporary variable assignment
01361    which was generated in p1put_call */
01362 
01363         else if (!ISCOMPLEX (q -> headblock.vtype) && !ISCHAR (q)){
01364             int use_paren = q -> tag == TEXPR &&
01365                     op_precedence (q -> exprblock.opcode) <=
01366                     op_precedence (OPCOMMA);
01367             if (q->headblock.vtype == TYREAL) {
01368                 if (forcereal) {
01369                         nice_printf(outfile, "(real)");
01370                         use_paren = 1;
01371                         }
01372                 }
01373             else if (!Ansi && ISINT(q->headblock.vtype)) {
01374                 nice_printf(outfile, "(ftnlen)");
01375                 use_paren = 1;
01376                 }
01377             if (use_paren) nice_printf (outfile, "(");
01378             expr_out (outfile, q);
01379             if (use_paren) nice_printf (outfile, ")");
01380         } /* if !ISCOMPLEX */
01381         else
01382             err ("out_call:  unknown parameter");
01383 
01384     } /* for (cp = arglist */
01385 
01386     if (arglist)
01387         frchain (&arglist);
01388 
01389     nice_printf (outfile, ")");
01390 
01391 } /* out_call */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_const ( FILE *  fp,
register Constp  cp 
)

Definition at line 471 of file output.c.

References cm_fmt_string, cpd, dcm_fmt_string, erri(), flconst(), j, nice_printf(), NULL, str_fmt, TYCHAR, TYCOMPLEX, TYDCOMPLEX, TYDREAL, TYINT1, TYLOGICAL, TYLOGICAL1, TYLOGICAL2, TYLONG, type, TYQUAD, TYREAL, and TYSHORT.

Referenced by expr_out(), out_addr(), output_literal(), wr_array_init(), wr_globals(), and wr_output_values().

00473 {
00474     static char real_buf[50], imag_buf[50];
00475     ftnint j;
00476     unsigned int k;
00477     int type = cp->vtype;
00478 
00479     switch (type) {
00480         case TYINT1:
00481         case TYSHORT:
00482             nice_printf (fp, "%ld", cp->Const.ci);      /* don't cast ci! */
00483             break;
00484         case TYLONG:
00485 #ifdef TYQUAD0
00486         case TYQUAD:
00487 #endif
00488             nice_printf (fp, "%ld", cp->Const.ci);      /* don't cast ci! */
00489             break;
00490 #ifndef NO_LONG_LONG
00491         case TYQUAD:
00492                 if (cp->Const.cd[1] == 123.456)
00493                         nice_printf (fp, "%s", cp->Const.cds[0]);
00494                 else
00495                         nice_printf (fp, "%lld", cp->Const.cq);
00496                 break;
00497 #endif
00498         case TYREAL:
00499             nice_printf(fp, "%s", flconst(real_buf, cpd(0)));
00500             break;
00501         case TYDREAL:
00502             nice_printf(fp, "%s", cpd(0));
00503             break;
00504         case TYCOMPLEX:
00505             nice_printf(fp, cm_fmt_string, flconst(real_buf, cpd(0)),
00506                         flconst(imag_buf, cpd(1)));
00507             break;
00508         case TYDCOMPLEX:
00509             nice_printf(fp, dcm_fmt_string, cpd(0), cpd(1));
00510             break;
00511         case TYLOGICAL1:
00512         case TYLOGICAL2:
00513         case TYLOGICAL:
00514             nice_printf (fp, "%s", cp->Const.ci ? "TRUE_" : "FALSE_");
00515             break;
00516         case TYCHAR: {
00517             char *c = cp->Const.ccp, *ce;
00518 
00519             if (c == NULL) {
00520                 nice_printf (fp, "\"\"");
00521                 break;
00522             } /* if c == NULL */
00523 
00524             nice_printf (fp, "\"");
00525             ce = c + cp->vleng->constblock.Const.ci;
00526             while(c < ce) {
00527                 k = *(unsigned char *)c++;
00528                 nice_printf(fp, str_fmt[k]);
00529                 }
00530             for(j = cp->Const.ccp1.blanks; j > 0; j--)
00531                 nice_printf(fp, " ");
00532             nice_printf (fp, "\"");
00533             break;
00534         } /* case TYCHAR */
00535         default:
00536             erri ("out_const:  bad type '%d'", (int) type);
00537             break;
00538     } /* switch */
00539 
00540 } /* out_const */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_else ( FILE *  outfile  ) 

Definition at line 1622 of file output.c.

References next_tab, output_rbrace(), and prev_tab.

Referenced by do_p1_else().

01624 {
01625     prev_tab (outfile);
01626     output_rbrace(outfile, "} else {\n");
01627     next_tab (outfile);
01628 } /* out_else */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_end_for ( FILE *  outfile  ) 

Definition at line 1748 of file output.c.

References nice_printf(), and prev_tab.

Referenced by do_p1_end_for().

01750 {
01751     prev_tab (outfile);
01752     nice_printf (outfile, "}\n");
01753 } /* out_end_for */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_for ( FILE *  outfile,
expptr  init,
expptr  test,
expptr  inc 
)

Definition at line 1729 of file output.c.

References expr_out(), init, next_tab, nice_printf(), and test.

Referenced by do_p1_for().

01731 {
01732     nice_printf (outfile, "for (");
01733     expr_out (outfile, init);
01734     nice_printf (outfile, "; ");
01735     expr_out (outfile, test);
01736     nice_printf (outfile, "; ");
01737     expr_out (outfile, inc);
01738     nice_printf (outfile, ") {\n");
01739     next_tab (outfile);
01740 } /* out_for */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_if ( FILE *  outfile,
expptr  expr 
)

Definition at line 1587 of file output.c.

References expr(), expr_out(), next_tab, and nice_printf().

Referenced by do_p1_if(), and elif_out().

01589 {
01590     nice_printf (outfile, "if (");
01591     expr_out (outfile, expr);
01592     nice_printf (outfile, ") {\n");
01593     next_tab (outfile);
01594 } /* out_if */

Here is the call graph for this function:

Here is the caller graph for this function:

void out_init ( Void   ) 

Definition at line 1431 of file output.c.

References Ansi, cm_fmt_string, db_fmt_string, dcm_fmt_string, fl_fmt_string, NULL, OPBITAND, OPBITOR, OPBITXOR, opeqable, OPLSHIFT, OPMINUS, OPMOD, OPPLUS, OPSLASH, OPSTAR, s, and tab_size.

Referenced by fileinit().

01432 {
01433     extern int tab_size;
01434     register char *s;
01435 
01436     s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_+-.";
01437     while(*s)
01438         tr_tab[*s++] = 3;
01439     tr_tab['>'] = 1;
01440 
01441         opeqable[OPPLUS] = 1;
01442         opeqable[OPMINUS] = 1;
01443         opeqable[OPSTAR] = 1;
01444         opeqable[OPSLASH] = 1;
01445         opeqable[OPMOD] = 1;
01446         opeqable[OPLSHIFT] = 1;
01447         opeqable[OPBITAND] = 1;
01448         opeqable[OPBITXOR] = 1;
01449         opeqable[OPBITOR ] = 1;
01450 
01451 
01452 /* Set the output format for both types of floating point constants */
01453 
01454     if (fl_fmt_string == NULL || *fl_fmt_string == '\0')
01455         fl_fmt_string = (char*)(Ansi == 1 ? "%sf" : "(float)%s");
01456 
01457     if (db_fmt_string == NULL || *db_fmt_string == '\0')
01458         db_fmt_string = "%.17g";
01459 
01460 /* Set the output format for both types of complex constants.  They will
01461    have string parameters rather than float or double so that the decimal
01462    point may be added to the strings generated by the {db,fl}_fmt_string
01463    formats above */
01464 
01465     if (cm_fmt_string == NULL || *cm_fmt_string == '\0') {
01466         cm_fmt_string = "{%s,%s}";
01467     } /* if cm_fmt_string == NULL */
01468 
01469     if (dcm_fmt_string == NULL || *dcm_fmt_string == '\0') {
01470         dcm_fmt_string = "{%s,%s}";
01471     } /* if dcm_fmt_string == NULL */
01472 
01473     tab_size = 4;
01474 } /* out_init */

Here is the caller graph for this function:

void out_name ( FILE *  fp,
Namep  namep 
)

Definition at line 438 of file output.c.

References Extsym::curno, Nameblock::cvarname, extern_out(), extsymtab, Addrblock::ident, nice_printf(), NULL, PTHISPROC, STGCOMMON, TYSUBR, usedefsforcommon, Addrblock::user, Nameblock::vardesc, Nameblock::varno, Nameblock::vcommequiv, Nameblock::vprocclass, Nameblock::vstg, Nameblock::vtype, and xretslot.

Referenced by expr_out(), list_arg_types(), listargs(), opconv_fudge(), out_addr(), out_call(), output_prim(), ref_defs(), wr_abbrevs(), wr_struct(), and write_namelists().

00440 {
00441     extern int usedefsforcommon;
00442     Extsym *comm;
00443 
00444     if (namep == NULL)
00445         return;
00446 
00447 /* DON'T want to use oneof_stg() here; need to find the right common name
00448    */
00449 
00450     if (namep->vstg == STGCOMMON && !namep->vcommequiv && !usedefsforcommon) {
00451         comm = &extsymtab[namep->vardesc.varno];
00452         extern_out(fp, comm);
00453         nice_printf(fp, "%d.", comm->curno);
00454     } /* if namep -> vstg == STGCOMMON */
00455 
00456     if (namep->vprocclass == PTHISPROC && namep->vtype != TYSUBR)
00457         nice_printf(fp, xretslot[namep->vtype]->user.ident);
00458     else
00459         nice_printf (fp, "%s", namep->cvarname);
00460 } /* out_name */

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_arg_list ( FILE *  fp,
struct Listblock listp 
) [static]

Definition at line 779 of file output.c.

References expr_out(), nice_printf(), and NULL.

Referenced by output_prim().

00781 {
00782     chainp arg_list;
00783 
00784     if (listp == (struct Listblock *) NULL || listp -> listp == (chainp) NULL)
00785         return;
00786 
00787     nice_printf (fp, "(");
00788 
00789     for (arg_list = listp -> listp; arg_list; arg_list = arg_list -> nextp) {
00790         expr_out (fp, (expptr) arg_list -> datap);
00791         if (arg_list -> nextp != (chainp) NULL)
00792 
00793 /* Might want to add a hook in here to accomodate the style setting which
00794    wants spaces after commas */
00795 
00796             nice_printf (fp, ",");
00797     } /* for arg_list */
00798 
00799     nice_printf (fp, ")");
00800 } /* output_arg_list */

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_binary ( FILE *  fp,
struct Exprblock e 
) [static]

Definition at line 1003 of file output.c.

References Expression::constblock, doin_setbound, erri(), expr_out(), Expression::exprblock, is_left_assoc, is_negatable(), is_right_assoc, isnegative_const(), Exprblock::leftp, lp, negate_const(), nice_printf(), NULL, op_format, op_precedence, OPADDR, OPCALL, OPCCALL, Exprblock::opcode, OPCOMMA_ARG, OPCONV, opconv_fudge(), OPMINUS, OPNEG, OPPLUS, out_call(), Exprblock::rightp, SPECIAL_FMT, Expression::tag, TCONST, and TEXPR.

Referenced by expr_out(), and output_unary().

01005 {
01006     char *format;
01007     int prec;
01008 
01009     if (e == NULL || e -> tag != TEXPR)
01010         return;
01011 
01012 /* Instead of writing a huge switch, I've incorporated the output format
01013    into a table.  Things like "%l" and "%r" stand for the left and
01014    right subexpressions.  This should allow both prefix and infix
01015    functions to be specified (e.g. "(%l * %r", "z_div (%l, %r").  Of
01016    course, I should REALLY think out the ramifications of writing out
01017    straight text, as opposed to some intermediate format, which could
01018    figure out and optimize on the the number of required blanks (we don't
01019    want "x - (-y)" to become "x --y", for example).  Special cases (such as
01020    incomplete implementations) could still be implemented as part of the
01021    switch, they will just have some dummy value instead of the string
01022    pattern.  Another difficulty is the fact that the complex functions
01023    will differ from the integer and real ones */
01024 
01025 /* Handle a special case.  We don't want to output "x + - 4", or "y - - 3"
01026 */
01027     if ((e -> opcode == OPPLUS || e -> opcode == OPMINUS) &&
01028             e -> rightp && e -> rightp -> tag == TCONST &&
01029             isnegative_const (&(e -> rightp -> constblock)) &&
01030             is_negatable (&(e -> rightp -> constblock))) {
01031 
01032         e -> opcode = (e -> opcode == OPPLUS) ? OPMINUS : OPPLUS;
01033         negate_const (&(e -> rightp -> constblock));
01034     } /* if e -> opcode == PLUS or MINUS */
01035 
01036     prec = op_precedence (e -> opcode);
01037     format = op_format (e -> opcode);
01038 
01039     if (format != SPECIAL_FMT) {
01040         while (*format) {
01041             if (*format == '%') {
01042                 int arg_prec, use_paren = 0;
01043                 expptr lp, rp;
01044 
01045                 switch (*(format + 1)) {
01046                     case 'l':
01047                         lp = e->leftp;
01048                         if (lp && lp->tag == TEXPR) {
01049                             arg_prec = op_precedence(lp->exprblock.opcode);
01050 
01051                             use_paren = arg_prec &&
01052                                 (arg_prec < prec || (arg_prec == prec &&
01053                                     is_right_assoc (prec)));
01054                         } /* if e -> leftp */
01055                         if (e->opcode == OPCONV && opconv_fudge(fp,e))
01056                                 break;
01057                         if (use_paren)
01058                             nice_printf (fp, "(");
01059                         expr_out(fp, lp);
01060                         if (use_paren)
01061                             nice_printf (fp, ")");
01062                         break;
01063                     case 'r':
01064                         rp = e->rightp;
01065                         if (rp && rp->tag == TEXPR) {
01066                             arg_prec = op_precedence(rp->exprblock.opcode);
01067 
01068                             use_paren = arg_prec &&
01069                                 (arg_prec < prec || (arg_prec == prec &&
01070                                     is_left_assoc (prec)));
01071                             use_paren = use_paren ||
01072                                 (rp->exprblock.opcode == OPNEG
01073                                 && prec >= op_precedence(OPMINUS));
01074                         } /* if e -> rightp */
01075                         if (use_paren)
01076                             nice_printf (fp, "(");
01077                         expr_out(fp, rp);
01078                         if (use_paren)
01079                             nice_printf (fp, ")");
01080                         break;
01081                     case '\0':
01082                     case '%':
01083                         nice_printf (fp, "%%");
01084                         break;
01085                     default:
01086                         erri ("output_binary: format err: '%%%c' illegal",
01087                                 (int) *(format + 1));
01088                         break;
01089                 } /* switch */
01090                 format += 2;
01091             } else
01092                 nice_printf (fp, "%c", *format++);
01093         } /* while *format */
01094     } else {
01095 
01096 /* Handle Special cases of formatting */
01097 
01098         switch (e -> opcode) {
01099                 case OPCCALL:
01100                 case OPCALL:
01101                         out_call (fp, (int) e -> opcode, e -> vtype,
01102                                         e -> vleng, e -> leftp, e -> rightp);
01103                         break;
01104 
01105                 case OPCOMMA_ARG:
01106                         doin_setbound = 1;
01107                         nice_printf(fp, "(");
01108                         expr_out(fp, e->leftp);
01109                         nice_printf(fp, ", &");
01110                         doin_setbound = 0;
01111                         expr_out(fp, e->rightp);
01112                         nice_printf(fp, ")");
01113                         break;
01114 
01115                 case OPADDR:
01116                 default:
01117                         nice_printf (fp, "Sorry, can't format OPCODE '%d'",
01118                                 e -> opcode);
01119                         break;
01120                 }
01121 
01122     } /* else */
01123 } /* output_binary */

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_list ( FILE *  fp,
struct Listblock listp 
) [static]

Definition at line 1501 of file output.c.

References expr_out(), and nice_printf().

Referenced by expr_out().

01503 {
01504     int did_one = 0;
01505     chainp elts;
01506 
01507     nice_printf (fp, "(");
01508     if (listp)
01509         for (elts = listp -> listp; elts; elts = elts -> nextp) {
01510             if (elts -> datap) {
01511                 if (did_one)
01512                     nice_printf (fp, ", ");
01513                 expr_out (fp, (expptr) elts -> datap);
01514                 did_one = 1;
01515             } /* if elts -> datap */
01516         } /* for elts */
01517     nice_printf (fp, ")");
01518 } /* output_list */

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_literal ( FILE *  fp,
long  memno,
Constp  cp 
) [static]

Definition at line 730 of file output.c.

References lit_name(), Literal::litnum, litpool, nice_printf(), nliterals, and out_const().

Referenced by out_addr().

00732 {
00733     struct Literal *litp, *lastlit;
00734 
00735     lastlit = litpool + nliterals;
00736 
00737     for (litp = litpool; litp < lastlit; litp++) {
00738         if (litp -> litnum == memno)
00739             break;
00740     } /* for litp */
00741 
00742     if (litp >= lastlit)
00743         out_const (fp, cp);
00744     else {
00745         nice_printf (fp, "%s", lit_name (litp));
00746         litp->lituse++;
00747         }
00748 } /* output_literal */

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_prim ( FILE *  fp,
struct Primblock primp 
) [static]

Definition at line 757 of file output.c.

References nice_printf(), NULL, out_name(), and output_arg_list().

Referenced by expr_out().

00759 {
00760     if (primp == NULL)
00761         return;
00762 
00763     out_name (fp, primp -> namep);
00764     if (primp -> argsp)
00765         output_arg_list (fp, primp -> argsp);
00766 
00767     if (primp -> fcharp != (expptr) NULL || primp -> lcharp != (expptr) NULL)
00768         nice_printf (fp, "Sorry, no substrings yet");
00769 }

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_rbrace ( FILE *  outfile,
char *  s 
) [static]

Definition at line 1602 of file output.c.

References fmt, last_was_label, and nice_printf().

Referenced by elif_out(), end_else_out(), endif_out(), and out_else().

01604 {
01605         extern int last_was_label;
01606         register char *fmt;
01607 
01608         if (last_was_label) {
01609                 last_was_label = 0;
01610                 fmt = ";%s";
01611                 }
01612         else
01613                 fmt = "%s";
01614         nice_printf(outfile, fmt, s);
01615         }

Here is the call graph for this function:

Here is the caller graph for this function:

static void output_unary ( FILE *  fp,
struct Exprblock e 
) [static]

Definition at line 810 of file output.c.

References dneg, erri(), nice_printf(), NULL, OPABS, OPADDR, OPBITNOT, OPCALL, OPCCALL, OPCHARCAST, Exprblock::opcode, OPDABS, OPIDENTITY, OPNEG, OPNEG1, OPNEG_KLUDGE, OPNOT, OPPREDEC, OPPREINC, OPWHATSIN, output_binary(), TYREAL, and Exprblock::vtype.

Referenced by expr_out().

00812 {
00813     if (e == NULL)
00814         return;
00815 
00816     switch (e -> opcode) {
00817         case OPNEG:
00818                 if (e->vtype == TYREAL && dneg) {
00819                         e->opcode = OPNEG_KLUDGE;
00820                         output_binary(fp,e);
00821                         e->opcode = OPNEG;
00822                         break;
00823                         }
00824         case OPNEG1:
00825         case OPNOT:
00826         case OPABS:
00827         case OPBITNOT:
00828         case OPWHATSIN:
00829         case OPPREINC:
00830         case OPPREDEC:
00831         case OPADDR:
00832         case OPIDENTITY:
00833         case OPCHARCAST:
00834         case OPDABS:
00835             output_binary (fp, e);
00836             break;
00837         case OPCALL:
00838         case OPCCALL:
00839             nice_printf (fp, "Sorry, no OPCALL yet");
00840             break;
00841         default:
00842             erri ("output_unary: bad opcode", (int) e -> opcode);
00843             break;
00844     } /* switch */
00845 } /* output_unary */

Here is the call graph for this function:

Here is the caller graph for this function:

int same_expr ( expptr  e1,
expptr  e2 
)

Definition at line 404 of file output.c.

References Expression::constblock, same_ident(), sameconst(), TADDR, TCONST, TEXPR, and TNAME.

Referenced by same_ident().

00406 {
00407     if (!e1 || !e2)
00408         return !e1 && !e2;
00409 
00410     if (e1 -> tag != e2 -> tag || e1 -> headblock.vtype != e2 -> headblock.vtype)
00411         return 0;
00412 
00413     switch (e1 -> tag) {
00414         case TEXPR:
00415             if (e1 -> exprblock.opcode != e2 -> exprblock.opcode)
00416                 return 0;
00417 
00418             return same_expr (e1 -> exprblock.leftp, e2 -> exprblock.leftp) &&
00419                    same_expr (e1 -> exprblock.rightp, e2 -> exprblock.rightp);
00420         case TNAME:
00421         case TADDR:
00422             return same_ident (e1, e2);
00423         case TCONST:
00424             return sameconst(&e1->constblock, &e2->constblock);
00425         default:
00426             return 0;
00427     } /* switch */
00428 } /* same_expr */

Here is the call graph for this function:

Here is the caller graph for this function:

int same_ident ( expptr  left,
expptr  right 
)

Definition at line 299 of file output.c.

References left, OPWHATSIN, right, same_expr(), TADDR, TEXPR, TNAME, UNAM_CHARP, UNAM_IDENT, UNAM_NAME, and UNAM_REF.

Referenced by expr_out(), and same_expr().

00301 {
00302     if (!left || !right)
00303         return 0;
00304 
00305     if (left -> tag == TNAME && right -> tag == TNAME && left == right)
00306         return 1;
00307 
00308     if (left -> tag == TADDR && right -> tag == TADDR &&
00309             left -> addrblock.uname_tag == right -> addrblock.uname_tag)
00310         switch (left -> addrblock.uname_tag) {
00311             case UNAM_REF:
00312             case UNAM_NAME:
00313 
00314 /* Check for array subscripts */
00315 
00316                 if (left -> addrblock.user.name -> vdim ||
00317                         right -> addrblock.user.name -> vdim)
00318                     if (left -> addrblock.user.name !=
00319                             right -> addrblock.user.name ||
00320                             !same_expr (left -> addrblock.memoffset,
00321                             right -> addrblock.memoffset))
00322                         return 0;
00323 
00324                 return same_ident ((expptr) (left -> addrblock.user.name),
00325                         (expptr) right -> addrblock.user.name);
00326             case UNAM_IDENT:
00327                 return strcmp(left->addrblock.user.ident,
00328                                 right->addrblock.user.ident) == 0;
00329             case UNAM_CHARP:
00330                 return strcmp(left->addrblock.user.Charp,
00331                                 right->addrblock.user.Charp) == 0;
00332             default:
00333                 return 0;
00334         } /* switch */
00335 
00336     if (left->tag == TEXPR && left->exprblock.opcode == OPWHATSIN
00337         && right->tag == TEXPR && right->exprblock.opcode == OPWHATSIN)
00338                 return same_ident(left->exprblock.leftp,
00339                                  right->exprblock.leftp);
00340 
00341     return 0;
00342 } /* same_ident */

Here is the call graph for this function:

Here is the caller graph for this function:

static int sameconst ( register Constp  c1,
register Constp  c2 
) [static]

Definition at line 368 of file output.c.

References err, memcmp(), samefpconst(), TYCHAR, TYCOMPLEX, TYDCOMPLEX, TYDREAL, TYINT, TYLOGICAL, TYREAL, and TYSHORT.

Referenced by same_expr().

00370 {
00371         switch(c1->vtype) {
00372                 case TYCOMPLEX:
00373                 case TYDCOMPLEX:
00374                         if (!samefpconst(c1,c2,1))
00375                                 return 0;
00376                 case TYREAL:
00377                 case TYDREAL:
00378                         return samefpconst(c1,c2,0);
00379                 case TYCHAR:
00380                         return c1->Const.ccp1.blanks == c2->Const.ccp1.blanks
00381                             &&     c1->vleng->constblock.Const.ci
00382                                 == c2->vleng->constblock.Const.ci
00383                             && !memcmp(c1->Const.ccp, c2->Const.ccp,
00384                                         (int)c1->vleng->constblock.Const.ci);
00385                 case TYSHORT:
00386                 case TYINT:
00387                 case TYLOGICAL:
00388                         return c1->Const.ci == c2->Const.ci;
00389                 }
00390         err("unexpected type in sameconst");
00391         return 0;
00392         }

Here is the call graph for this function:

Here is the caller graph for this function:

static int samefpconst ( register Constp  c1,
register Constp  c2,
register int  n 
) [static]

Definition at line 351 of file output.c.

References dtos(), s1, and s2.

Referenced by sameconst().

00353 {
00354         char *s1, *s2;
00355         if (!c1->vstg && !c2->vstg)
00356                 return c1->Const.cd[n] == c2->Const.cd[n];
00357         s1 = c1->vstg ? c1->Const.cds[n] : dtos(c1->Const.cd[n]);
00358         s2 = c2->vstg ? c2->Const.cds[n] : dtos(c2->Const.cd[n]);
00359         return !strcmp(s1, s2);
00360         }

Here is the call graph for this function:

Here is the caller graph for this function:


Variable Documentation

char _assoc_table[] = { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 }

Definition at line 35 of file output.c.

int dneg

Definition at line 82 of file main.c.

Referenced by output_unary(), and set_externs().

table_entry opcode_table[]

Definition at line 41 of file output.c.

char opeqable[sizeof(opcode_table)/sizeof(table_entry)] [static]

Definition at line 130 of file output.c.

Referenced by expr_out(), and out_init().

char tr_tab[Table_size]

Definition at line 1424 of file output.c.

Referenced by ind_printf().

int trapuv

Definition at line 105 of file main.c.


Generated on Sun Mar 4 15:10:06 2007 for Scilab [trunk] by  doxygen 1.5.1